2010-06-22 9 views
91

Was ist der Unterschied zwischen empty() und remove() Methoden in jQuery, und wenn wir eine dieser Methoden aufrufen, werden die Objekte erstellt werden zerstört und Speicher freigegeben?jQuery leer() vs entfernen()

Antwort

145
  • empty() wird den gesamten Inhalt der Auswahl entfernen.
  • remove() wird die Auswahl und ihren Inhalt entfernen.

Bedenken Sie:

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

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

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

die DOM-Objekte Beide entfernen und den Speicher freigeben sollte sie nehmen, ja.

+1

Was ist mit Event Handlern? Ich habe einen seltsamen Fall, bei dem zweimal leer + anhängen, mit verschiedenen Anhängen bewirkt, dass der zweite Satz angehängter Elemente die Handler des ersten Satzes ausführt. – Killroy

+0

@way zu spät, aber sie entfernen auch den Handler. Es besteht die Möglichkeit, dass diese Handler mit einer Funktion wie "live" oder "delegate" registriert wurden. – undone

48

Die Dokumentation erklärt es sehr gut. Es enthält auch Beispiele:

vor:

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

.remove():

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

nach:

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

vor:

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

.empty():

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

nach:

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

Soweit Speicher betroffen ist, sobald ein ele ment aus dem DOM entfernt wurde und es keine weiteren Verweise darauf gibt, wird der Garbage Collector den Speicher zurückfordern, wenn er ausgeführt wird.

+0

Große Antwort ... thnx :) – Bhupi

+0

leer wird nicht die Attribute des Selektors berühren. Wenn Sie die Attribute des Selector-Elements entfernen möchten, habe ich festgestellt, dass jQuery removeAttr und removeClass in Firefox fehlerhaft sind. Die Option, die ich hatte, bestand also darin, die Methode remove zu verwenden und das Containerelement erneut hinzuzufügen und anschließend untergeordnete Knoten an dasselbe anzuhängen. – randominstanceOfLivingThing

+0

Ähnlich kann man detach() auch mit den beiden obigen ... erklären. – Krish

1

$("body").empty() - es entfernt die HTML-DOM-Elemente im Inneren des Körpers tag -

, wenn Sie erklären $("body").remove() - es die gesamte HTML-DOM entfernen zusammen mit Körper TAG.

+15

Was gibt diese Antwort, die in den vorhandenen Antworten fehlt, die seit drei Jahren hier sind? – jcsanyi