ลบองค์ประกอบตามรหัส


1129

เมื่อลบองค์ประกอบด้วย JavaScript มาตรฐานคุณต้องไปที่แม่ของมันก่อน:

var element = document.getElementById("element-id");
element.parentNode.removeChild(element);

ต้องไปที่โหนดหลักก่อนดูแปลกสำหรับฉันมีเหตุผลที่ใช้งาน JavaScript เช่นนี้?


534
อย่างที่เจมส์พูด DOM ไม่สนับสนุนการลบวัตถุโดยตรง คุณต้องไปที่หลักและนำออกจากที่นั่น Javascript จะไม่ยอมให้องค์ประกอบฆ่าตัวตาย แต่มันอนุญาตให้มีการฆ่าตัวตาย ...
Mark Henderson

21
มีเหตุผลหรือไม่? ริชาร์ดไฟน์แมนบอกว่าไม่มี (ด้วยเหตุผลทางเทคนิคนั้นง่ายต่อการดูว่าคุณเขียนโปรแกรมใด ๆ ที่มีโครงสร้างแบบต้นไม้หรือไม่เด็กต้องแจ้งผู้ปกครองต่อไปมิฉะนั้นโครงสร้างของต้นไม้อาจไม่สามารถใช้งานได้เนื่องจากมันต้องทำภายใน มันเป็นเพียงฟังก์ชั่นที่สะดวกสบายสำหรับคุณที่คุณอาจรวมทั้งกำหนดเอง).
kizzx2

6
เหตุผลเดียวที่ฉันเห็นคือควรมีองค์ประกอบรากในเอกสาร xml / xhtml เสมอดังนั้นคุณจะไม่สามารถลบออกได้เนื่องจากไม่มีผู้ปกครอง
Alex K

5
ฉันค่อนข้างชอบวิธีแก้ปัญหาของโจฮันและฉันไม่แน่ใจว่าทำไมฟังก์ชั่นเหล่านั้นจึงไม่ได้ให้มาด้วย ดังที่เห็นได้จากจำนวนผู้ชมมันเป็นการดำเนินการทั่วไป
Zaz

12
คุณสามารถใช้element.remove()โดยตรงตั้งแต่ ES5 คุณไม่ต้องการผู้ปกครอง!
Gibolt

คำตอบ:


659

ฉันรู้ว่าการเพิ่มฟังก์ชั่น DOM ดั้งเดิมไม่ใช่วิธีที่ดีที่สุดหรือได้รับความนิยมสูงสุดเสมอไป แต่สิ่งนี้ใช้ได้ดีสำหรับเบราว์เซอร์สมัยใหม่

Element.prototype.remove = function() {
    this.parentElement.removeChild(this);
}
NodeList.prototype.remove = HTMLCollection.prototype.remove = function() {
    for(var i = this.length - 1; i >= 0; i--) {
        if(this[i] && this[i].parentElement) {
            this[i].parentElement.removeChild(this[i]);
        }
    }
}

และจากนั้นคุณสามารถลบองค์ประกอบเช่นนี้

document.getElementById("my-element").remove();

หรือ

document.getElementsByClassName("my-elements").remove();

หมายเหตุ:วิธีนี้ใช้ไม่ได้กับ IE 7 และด้านล่าง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการขยาย DOM อ่านบทความ

แก้ไข : การตรวจสอบคำตอบของฉันในปี 2562 node.remove()มาถึงการช่วยเหลือและสามารถนำมาใช้ดังต่อไปนี้ (โดยไม่ต้องใส่ polyfill ด้านบน):

document.getElementById("my-element").remove();

หรือ

[...document.getElementsByClassName("my-elements")].map(n => n && n.remove());

ฟังก์ชั่นเหล่านี้มีอยู่ในเบราว์เซอร์สมัยใหม่ทั้งหมด (ไม่ใช่ IE) อ่านเพิ่มเติมเกี่ยวกับMDN


3
ไม่ควรเป็น [document.getElementsByClassName ("my-elements") [0] .remove (); ] ฉันคิดว่าฟังก์ชั่น remove () ไม่ได้ถูกใช้โดยอาร์เรย์ ในการลบองค์ประกอบทั้งหมดของคลาสหรือตัวเลือกใด ๆ ที่ส่งคืนอาร์เรย์คุณจะต้องวนซ้ำองค์ประกอบทั้งหมดและเรียกการลบ () ในแต่ละรายการ
Sedat Kilinc

1
@SedatKilinc คุณลองตัวอย่างจริงหรือไม่ มีอาร์เรย์ไม่มีส่วนเกี่ยวข้อง แต่มีNodeListหรือHTMLCollectionที่มีอาร์เรย์เหมือนชุดขององค์ประกอบ นิยามวิธีที่สองช่วยให้ "ชุดองค์ประกอบ" เหล่านี้ถูกลบออก
Johan Dettmar

1
document.getElementsByClassName("my-elements").remove();ทำงานนี้ในคอนโซลโครเมี่ยมเท่านั้นดูเหมือนว่าจะลบองค์ประกอบหนึ่งในช่วงเวลาที่ใช้ แก้ไข: จริง ๆ แล้วมันจะลบกลุ่ม แต่ต้องเรียกใช้อีกครั้งเพื่อให้เสร็จ ลองในหน้านี้ด้วยคลาส "คัดลอกความคิดเห็น"
DanielST

2
@ slicedtoad คุณถูกต้องฉันไม่ดี ฉันแก้ไขฟังก์ชั่นเพื่อวนย้อนหลังผ่านองค์ประกอบต่างๆ ดูเหมือนว่าจะทำงานได้ดี พฤติกรรมที่คุณกำลังพูดถึงมีแนวโน้มมากที่สุดที่เกิดจากดัชนีที่อัปเดต
Johan Dettmar

1
อย่าทำอย่างนี้ เพียงลบรายการตามที่ภาษาตั้งใจ ใครก็ตามที่คุ้นเคยกับการแยกวิเคราะห์ XML จะรับรู้ถึงความจำเป็นที่จะต้องไปที่พาเรนต์เพื่อลบเด็ก ๆ HTML เป็นชุดของ XML (เรียงลำดับ)
Hal50000

283

Crossbrowser และ IE> = 11:

document.getElementById("element-id").outerHTML = "";

3
นี่เป็นวิธีที่ง่ายที่สุดน่าเชื่อถือที่สุดและเร็วที่สุด ฉันไม่ต้องการลบองค์ประกอบดังนั้นฉันจึงข้ามบรรทัดสุดท้าย แต่ไม่ควรเพิ่มค่าใช้จ่ายใด ๆ ด้วยวิธีนี้ .. หมายเหตุ : ฉันพบสิ่งนี้ในขณะที่พยายามค้นหาเร็วกว่า$.readyทางเลือก js สำหรับnoscriptแท็ก เพื่อที่จะใช้ตามที่ฉันต้องการฉันต้องห่อมันในsetTimeoutฟังก์ชั่น1 มิลลิวินาที วิธีนี้จะช่วยแก้ปัญหาทั้งหมดของฉันในครั้งเดียว กราเซีย
DGO

โปรดทราบว่าouterHTMLยังคงเป็นสิ่งใหม่ (เพิ่มเติม) เพื่อเป็นมาตรฐาน หากคุณกำลังมองหาความช่วยเหลือเกี่ยวกับซอฟต์แวร์ใด ๆ > 6 ตอนที่เขียนคุณจะต้องมีวิธีแก้ไขปัญหาอื่น removeฟังก์ชั่นอื่น ๆ ที่กล่าวถึงโดยเป็นกรณีที่คล้ายกัน ตามปกติจะปลอดภัยที่จะใช้ polyfill
Super Cat

delete elementไม่ทำอะไรเลยเพราะคุณไม่สามารถลบตัวแปรใน JS ได้มีเพียงปุ่มเท่านั้น) ตรวจสอบด้วยตัวคุณเองว่าไม่ได้ทำงานconsole.log(element)หลังจากdelete element...
Ivan Kleshnin

2
ช้ากว่านี้เล็กน้อยremoveChild(ประมาณ 6-7% ในระบบของฉัน) ดูjsperf.com/clear-outerhtml-v-removechild/2
Alejandro García Iglesias

1
การทำเช่นนี้อาจทำให้มีช่องว่างที่ iframe เคยเป็นหากเป็นสิ่งที่คุณพยายามลบ
lacostenycoder

164

คุณสามารถสร้างremoveฟังก์ชั่นเพื่อที่คุณจะได้ไม่ต้องคิดถึงมันทุกครั้ง:

function removeElement(id) {
    var elem = document.getElementById(id);
    return elem.parentNode.removeChild(elem);
}

12
ถ้าคุณต้องการหนึ่งซับโดยไม่ต้องไปทั่วโลกคุณสามารถเปลี่ยนไปelem remove.elemด้วยวิธีนี้ฟังก์ชั่นอ้างอิงตัวเองดังนั้นคุณไม่จำเป็นต้องสร้างตัวแปรทั่วโลกอีก :-)
twiz

4
ดังนั้นทำไมคุณต้องส่ง elem กลับมา? ทำไมต้องไม่function remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
Zach Lysobey

4
@ZachL: ในขณะที่วิธีการแก้ปัญหาของคุณอาจดูเหมือนชัดเจนมากขึ้นมันทำการค้นหา DOM สองครั้งซึ่งช้ากว่าและบางอย่างที่โซลูชันอื่น ๆ ดูเหมือนจะต้องการหลีกเลี่ยง
Wk_of_Angmar

3
ไม่ทำงาน, ไม่เป็นผล. ข้อผิดพลาดมากเกินไป ใช้งานได้: var elem = document.getElementById ('id'); elem.parentNode.removeChild (elem);
มิทช์ Match

2
ว้าวทำไมมีความซับซ้อนมาก เพียงแค่ส่งองค์ประกอบไปยังฟังก์ชันแทนที่จะเป็นสตริง id วิธีนี้เป็นองค์ประกอบที่สามารถเข้าถึงได้ในฟังก์ชั่นทั้งหมดและมันยังคงเป็นหนึ่งซับ
David Fariña

97

มันเป็นสิ่งที่เป็น DOM สนับสนุน ค้นหาหน้านั้นสำหรับ "remove" หรือ "delete" และremoveChildเป็นเพียงเพจเดียวที่ลบโหนด


13
นั่นเป็นคำตอบของคำถามเดิม แต่ทำไม JavaScript จึงทำงานเช่นนี้
Zaz

5
ฉันแค่เดาที่นี่ แต่ฉันคิดว่ามันเกี่ยวกับการจัดการหน่วยความจำ โหนดพาเรนต์ส่วนใหญ่มีรายการตัวชี้ไปยังโหนดชายน์ หากคุณเพิ่งลบโหนด (โดยไม่ใช้พาเรนต์) พาเรนต์จะยังคงถือตัวชี้และทำให้หน่วยความจำรั่ว ดังนั้น api บังคับให้คุณเรียกใช้ฟังก์ชันบนพาเรนต์เพื่อลบชายด์ สิ่งนี้ก็เป็นสิ่งที่ดีเพราะมันสามารถทำให้ต้นไม้ผ่านโหนดลูกที่เรียกว่าลบออกในแต่ละของพวกเขาและไม่รั่วหน่วยความจำ
Chadams

2
เฮ้พวกแม้ว่าการอ้างอิงนั้นจะไม่มีสิ่งนี้ แต่ฉันก็พบว่ามันบังเอิญ การเขียนelement.remove();จะทำงาน อาจเป็นสิ่งใหม่ แต่ครั้งแรกสำหรับฉันและมันใช้งานได้ ฉันคิดว่ามันควรจะทำงานได้เสมอเพราะมันธรรมดามาก ๆ ต้องมีของ
มูฮัมหมัดอูเมอ

1
แต่มันไม่ทำงานใน IE7 และด้านล่าง จาก IE7 และด้านล่างลบ () ไม่ทำงาน
fanfan1609

1
ถ้าฉันต้องเดาเหตุผลว่าทำไมมันถึงเป็นเช่นนี้ก็เพราะองค์ประกอบ DOM ไม่สามารถลบตัวเองออกได้ คุณกำลังถอดพรมสุภาษิตจากใต้ฝ่าเท้า คุณต้องลบมันออกจากภาชนะ อย่างน้อยนั่นก็เป็นวิธีที่ฉันลองคิดดู
PhilT

82

DOM ถูกจัดระเบียบในแผนผังของโหนดโดยที่แต่ละโหนดมีค่าพร้อมกับรายการของการอ้างอิงไปยังโหนดชายด์ ดังนั้นelement.parentNode.removeChild(element)เลียนแบบสิ่งที่เกิดขึ้นภายใน: ขั้นแรกให้คุณไปที่โหนดแม่จากนั้นลบการอ้างอิงไปยังโหนดลูก

ในฐานะของ DOM4 element.remove()ฟังก์ชั่นการช่วยเหลือมีไว้เพื่อทำสิ่งเดียวกัน: ใช้งานได้ใน 87% ของเบราว์เซอร์ (จนถึงปี 2559) แต่ไม่ใช่ IE 11 หากคุณต้องการรองรับเบราว์เซอร์รุ่นเก่าคุณสามารถ:

  • ลบองค์ประกอบผ่านโหนดแม่ในขณะที่คำถาม ,
  • แก้ไขฟังก์ชัน DOM ดั้งเดิมเช่นเดียวกับในคำตอบของ Johan Dettmarหรือ
  • ใช้polyfill DOM4

2
กรุณาอย่า"ปรับเปลี่ยนฟังก์ชั่น DOM พื้นเมือง"
Emile Bergeron

36

สำหรับการลบองค์ประกอบเดียว:

 var elem = document.getElementById("yourid");
 elem.parentElement.removeChild(elem);

สำหรับการลบองค์ประกอบทั้งหมดด้วยตัวอย่างเช่นชื่อคลาสที่แน่นอน:

 var list = document.getElementsByClassName("yourclassname");
 for(var i = list.length - 1; 0 <= i; i--)
 if(list[i] && list[i].parentElement)
 list[i].parentElement.removeChild(list[i]);

นี่เป็นคำตอบที่ได้รับการคุ้มครองอย่างดี
KyleMit

4
+1 ตัวอย่างง่ายๆของการลบโดยใช้ชื่อคลาส คำตอบอื่น ๆ ไม่ได้รับการกล่าวถึงอย่างดี
Louise Eggleton

ทำไมif(list[i] && list[i].parentElement)สายจึงจำเป็น? การดำรงอยู่ของแต่ละองค์ประกอบไม่รับประกันโดยข้อเท็จจริงที่ว่ามันถูกส่งคืนโดยgetElementsByClassNameวิธีการหรือไม่
Hydrothermal

น่าเสียดายที่การดำรงอยู่นั้นไม่ได้รับประกันจริง ๆ เท่าที่ฉันรู้ แต่ฉันไม่ทราบรายละเอียดเกี่ยวกับมัน ฉันเพิ่งพบค่าแปลก ๆ ที่ไม่ได้กำหนดหรือค่า null เพียงครั้งเดียวและฉันวางเช็คนั้นโดยไม่ต้องตรวจสอบเพิ่มเติม ดังนั้นนี่คือการแฮ็กเล็กน้อย
csjpeter

มันควรจะเป็นdocument.getElementsByClassName(...
คนงาน

21

คุณสามารถใช้ element.remove()


13
element.remove()ไม่ถูกต้อง JavaScript และจะทำงานเฉพาะในเบราว์เซอร์บางอย่างเช่นโครเมี่ยม
Zaz

4
Josh เป็นจาวาสคริปต์ที่ถูกต้องยกเว้นเฉพาะ Firefox และ Chrome ที่ใช้งาน (ดู MDN)
Tim Nguyen

10
สิ่งที่ไม่ดีของฉันelement.remove() คือ JavaScript ที่ถูกต้องกับ DOM4และทำงานได้ในเบราว์เซอร์ที่ทันสมัยทั้งหมดโดยปกติยกเว้น Internet Explorer
Zaz

24
ทำงานได้ดีบน FireFox และ Chrome ผู้ที่สนใจเกี่ยวกับ IE
Arun Sharma

13
คนที่มีงานดูแลเกี่ยวกับ IE!
sqram

18

ChildNode.remove()วิธีการเอาวัตถุจากต้นไม้มันเป็น

https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove

นี่คือซอที่แสดงวิธีที่คุณสามารถโทร document.getElementById('my-id').remove()

https://jsfiddle.net/52kp584L/

**

ไม่จำเป็นต้องขยาย NodeList มันได้รับการดำเนินการแล้ว

**


2
หมายเหตุสิ่งนี้ไม่รองรับใน IE เวอร์ชันใด ๆ !
MacroMan

1
หากคุณยังคงพัฒนาสำหรับ IE ฉันรู้สึกเสียใจมากสำหรับคุณ
Alex Fallenstedt

คุณไม่พัฒนาสำหรับ IE ใช่ไหม ฉันรู้สึกเสียใจอย่างมากกับลูกค้าหรือลูกค้าของคุณ
MacroMan

13

คุณสามารถลบองค์ประกอบนั้นโดยตรงโดยใช้remove()วิธีการของ DOM

นี่คือตัวอย่าง:

let subsWrapper = document.getElementById("element_id");
subsWrapper.remove();
//OR directly.
document.getElementById("element_id").remove();

10

ตาม DOM ระดับ 4 รายละเอียดซึ่งเป็นรุ่นปัจจุบันในการพัฒนามีบางวิธีการกลายพันธุ์ที่มีประโยชน์ใหม่ที่สามารถใช้ได้: append(), prepend(), before(), after(), และreplace()remove()

https://catalin.red/removing-an-element-with-plain-javascript-remove-method/


7

ต้องไปที่โหนดหลักก่อนดูแปลกสำหรับฉันมีเหตุผลที่ใช้งาน JavaScript เช่นนี้?

ชื่อฟังก์ชั่นคือremoveChild()และเป็นไปได้อย่างไรที่จะลบเด็กเมื่อไม่มีผู้ปกครอง? :)

ในทางกลับกันคุณไม่จำเป็นต้องโทรหาทุกครั้งที่แสดง element.parentNodeเป็นเพียงผู้ช่วยที่จะได้รับโหนดหลักของโหนดที่กำหนด หากคุณรู้จักโหนดพาเรนต์แล้วคุณสามารถใช้มันได้ดังนี้:

Ex:

// Removing a specified element when knowing its parent node
var d = document.getElementById("top");
var d_nested = document.getElementById("nested");
var throwawayNode = d.removeChild(d_nested);

https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild

================================================== =======

ในการเพิ่มอะไรเพิ่มเติม:

คำตอบบางคนได้ชี้ให้เห็นว่าแทนการใช้คุณสามารถใช้parentNode.removeChild(child); elem.remove();แต่อย่างที่ฉันสังเกตเห็นมีความแตกต่างระหว่างสองฟังก์ชั่นและไม่ได้กล่าวถึงในคำตอบเหล่านั้น

หากคุณใช้removeChild()มันจะส่งคืนการอ้างอิงไปยังโหนดที่ถูกลบออก

var removedChild = element.parentNode.removeChild(element); 
console.log(removedChild); //will print the removed child.

แต่ถ้าคุณใช้elem.remove();มันจะไม่ส่งคืนข้อมูลอ้างอิงให้คุณ

var el = document.getElementById('Example');
var removedChild = el.remove(); //undefined

https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove

พฤติกรรมนี้สามารถสังเกตได้ใน Chrome และ FF ฉันเชื่อว่ามันคุ้มค่าที่จะสังเกตเห็น :)

หวังว่าคำตอบของฉันจะเพิ่มคุณค่าให้กับคำถามและจะเป็นประโยชน์ !!


6

ฟังก์ชั่นที่ใช้ ele.parentNode.removeChild (ele) จะไม่ทำงานกับองค์ประกอบที่คุณสร้างขึ้น แต่ยังไม่ได้แทรกลงใน HTML ไลบรารีอย่าง jQuery และ Prototype ใช้วิธีการดังต่อไปนี้เพื่อหลีกเลี่ยงข้อ จำกัด ดังกล่าว

_limbo = document.createElement('div');
function deleteElement(ele){
    _limbo.appendChild(ele);
    _limbo.removeChild(ele);
}

ฉันคิดว่า JavaScript ทำงานอย่างนั้นเพราะนักออกแบบดั้งเดิมของ DOM มีผู้ปกครอง / เด็กและการนำทางก่อนหน้า / ถัดไปเป็นลำดับความสำคัญสูงกว่าการปรับเปลี่ยน DHTML ที่เป็นที่นิยมในปัจจุบัน ความสามารถในการอ่านจาก <input type = 'text'> และเขียนไปยังอีกตำแหน่งหนึ่งใน DOM นั้นมีประโยชน์ในช่วงกลางยุค 90 เวลาที่การสร้างแบบไดนามิกของรูปแบบ HTML ทั้งหมดหรือองค์ประกอบ GUI แบบโต้ตอบแทบจะไม่กระพริบตา สายตาของนักพัฒนาบางคน


3

ต้องไปที่โหนดหลักก่อนดูแปลกสำหรับฉันมีเหตุผลที่ใช้งาน JavaScript เช่นนี้?

IMHO: เหตุผลนี้เหมือนกับที่ฉันเห็นในสภาพแวดล้อมอื่น: คุณกำลังดำเนินการตาม "ลิงก์" ของคุณกับบางสิ่ง คุณไม่สามารถลบได้ในขณะที่คุณเชื่อมโยงอยู่

เหมือนการตัดกิ่งไม้ นั่งข้าง ๆ ต้นไม้ที่ใกล้ที่สุดขณะตัดหรือผลที่ตามมาคือ ... โชคร้าย (แม้ว่าจะตลก)


2

อันนี้จริงมาจาก FireFox ... ครั้งหนึ่ง IE อยู่ข้างหน้าของแพ็คและอนุญาตให้ลบองค์ประกอบโดยตรง

นี่เป็นเพียงข้อสันนิษฐานของฉัน แต่ฉันเชื่อว่าเหตุผลที่คุณต้องลบเด็กผ่านผู้ปกครองเกิดจากปัญหาเกี่ยวกับวิธีที่ FireFox จัดการกับการอ้างอิง

หากคุณเรียกใช้วัตถุเพื่อกระทำ hari-kari โดยตรงจากนั้นทันทีหลังจากมันตายคุณยังถือการอ้างอิงนั้นอยู่ สิ่งนี้มีความเป็นไปได้ที่จะสร้างข้อผิดพลาดที่น่ารังเกียจหลายอย่าง ... เช่นไม่สามารถลบออกได้ทำการลบมัน แต่ทำให้การอ้างอิงนั้นดูเหมือนว่าถูกต้องหรือหน่วยความจำรั่ว

ฉันเชื่อว่าเมื่อพวกเขาตระหนักถึงปัญหาการแก้ไขคือการลบองค์ประกอบผ่านทางผู้ปกครองเพราะเมื่อองค์ประกอบหายไปตอนนี้คุณเพียงแค่ถือการอ้างอิงไปยังผู้ปกครอง สิ่งนี้จะหยุดสิ่งที่ไม่พึงประสงค์ทั้งหมดและ (ถ้าปิดโหนดต้นไม้ตามโหนด) จะ 'zip-up' ค่อนข้างดี

มันควรจะเป็นข้อผิดพลาดที่แก้ไขได้ง่าย แต่เช่นเดียวกับสิ่งอื่น ๆ ในการเขียนโปรแกรมเว็บการวางจำหน่ายอาจจะรีบนำไปสู่สิ่งนี้ ... และเมื่อถึงเวลาที่รุ่นถัดไปมาถึงคนจำนวนมากพอที่จะใช้มัน เพื่อทำลายรหัส

ทั้งหมดนี้เป็นเพียงการคาดเดาของฉัน

อย่างไรก็ตามฉันหวังว่าจะถึงวันที่ในที่สุดการเขียนโปรแกรมเว็บจะได้รับการทำความสะอาดสปริงอย่างเต็มที่สิ่งที่แปลกประหลาดเล็กน้อยเหล่านี้จะถูกทำความสะอาดและทุกคนก็เริ่มเล่นตามกฎเดียวกัน

อาจจะเป็นวันหนึ่งหลังจากที่คนรับใช้หุ่นยนต์ของฉันฟ้องฉันสำหรับค่าจ้างกลับ


10
ฉันสงสัยว่า Firefox เป็นผู้รับผิดชอบในเรื่องนี้ removeChildเป็นวิธีการที่DOM ระดับ 1Nodeอินเตอร์เฟซ
เฟลิกซ์คลิง

0

จากสิ่งที่ฉันเข้าใจการลบโหนดโดยตรงไม่ทำงานใน Firefox เพียง Internet Explorer ดังนั้นเพื่อรองรับ Firefox คุณต้องขึ้นไปที่ผู้ปกครองเพื่อลบมันออก

Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/


6
แต่นั่นไม่ได้ตอบคำถามของฉันและหน้าเว็บที่คุณเชื่อมโยงเพื่อให้ทางออกที่แย่กว่าของฉัน
Zaz

0
// http://javascript.crockford.com/memory/leak.html
// cleans dom element to prevent memory leaks
function domPurge(d) {
    var a = d.attributes, i, l, n;
    if (a) {
        for (i = a.length - 1; i >= 0; i -= 1) {
            n = a[i].name;
            if (typeof d[n] === 'function') {
                d[n] = null;
            }
        }
    }
    a = d.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            domPurge(d.childNodes[i]);
       }
    }
}

function domRemove(id) {
    var elem = document.getElementById(id);
    domPurge(elem);
    return elem.parentNode.removeChild(elem);
}

-3

นี่เป็นฟังก์ชันที่ดีที่สุดในการลบองค์ประกอบโดยไม่มีข้อผิดพลาดของสคริปต์:

function Remove(EId)
{
    return(EObj=document.getElementById(EId))?EObj.parentNode.removeChild(EObj):false;
}

EObj=document.getElementById(EId)หมายเหตุ

==นี้เป็นหนึ่งในเครื่องหมายเท่ากับไม่ได้

ถ้าองค์ประกอบที่มีอยู่แล้วฟังก์ชั่นเอาไว้มิฉะนั้นก็จะส่งกลับเท็จไม่EIderror


4
สร้างตัวแปรทั่วโลก
bjb568

1
มันเป็นรุ่นที่แย่ที่สุดสำหรับคำตอบอื่นแต่สายไป 2 ปี
Emile Bergeron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.