jQuery ว่าง () เทียบกับลบ ()


99

อะไรคือความแตกต่างระหว่างempty()และremove()วิธีการในjQueryและเมื่อเราเรียกวิธีการใด ๆ เหล่านี้วัตถุที่สร้างขึ้นจะถูกทำลายและปล่อยหน่วยความจำออกมา?

คำตอบ:


160
  • empty() จะทำให้การเลือกเนื้อหาว่างเปล่า แต่คงการเลือกไว้เอง
  • remove()จะทำให้การเลือกเนื้อหาว่างเปล่าและลบการเลือกออกไป

พิจารณา:

<div>
    <p><strong>foo</strong></p>
</div>

$('p').empty();  // --> "<div><p></p></div>"

// whereas,
$('p').remove(); // --> "<div></div>"

ทั้งสองลบวัตถุ DOM และควรปล่อยหน่วยความจำที่ใช้ไปใช่


ลิงค์ไปยังเอกสารประกอบซึ่งมีตัวอย่างดังนี้


1
แล้วตัวจัดการเหตุการณ์ล่ะ? ฉันมีกรณีแปลก ๆ ที่ว่าง + ต่อท้ายสองครั้งโดยมีการต่อท้ายที่แตกต่างกันทำให้ชุดที่สองของรายการต่อท้ายดำเนินการตัวจัดการของชุดแรก
Killroy

1
@ สายเกินไป แต่พวกเขาก็ลบตัวจัดการเช่นกัน มีโอกาสที่คุณจะได้ขนย้ายผู้ที่ลงทะเบียนกับฟังก์ชั่นเช่นเป็นหรือlive delegate
ยกเลิก

55

เอกสารอธิบายได้เป็นอย่างดี นอกจากนี้ยังมีตัวอย่าง:

ก่อน:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

.remove ():

$('.hello').remove();

หลังจาก:

<div class="container">
  <div class="goodbye">Goodbye</div>
</div>

ก่อน:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

. ว่าง ():

$('.hello').empty();

หลังจาก:

<div class="container">
  <div class="hello"></div>
  <div class="goodbye">Goodbye</div>
</div>

เท่าที่เกี่ยวข้องกับหน่วยความจำเมื่อองค์ประกอบถูกลบออกจาก DOM และไม่มีการอ้างถึงอีกต่อไปตัวรวบรวมขยะจะเรียกคืนหน่วยความจำเมื่อทำงาน


ว่างเปล่าจะไม่แตะคุณสมบัติของตัวเลือก หากคุณต้องการลบแอตทริบิวต์ขององค์ประกอบตัวเลือกฉันสังเกตเห็นว่า jQuery removeAttr และ removeClass เป็นบั๊กใน firefox ดังนั้นตัวเลือกที่ฉันมีคือใช้วิธีลบและเพิ่มองค์ประกอบคอนเทนเนอร์อีกครั้งจากนั้นต่อท้ายโหนดลูกให้เหมือนเดิม
randominstanceOfLivingThing

บทสรุปที่สมบูรณ์แบบนี้อธิบายได้ดีมาก! สำหรับฉันดีกว่าคำตอบที่ได้รับการยอมรับ
JonSnow

2

$("body").empty() - มัน 'ลบองค์ประกอบ HTML DOM ภายในแท็กเนื้อหา -

เมื่อคุณประกาศ $("body").remove() - จะลบ HTML DOM ทั้งหมดพร้อมกับ body TAG


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