2010-06-15 15 views
63

Ich habe eine Liste, ich möchte nur alle Kindknoten daraus entfernen. Was ist der effizienteste Weg mit jquery? Dies ist, was ich habe:Entfernen Sie alle untergeordneten Knoten von einem übergeordneten Knoten?

Gibt es eine Verknüpfung anstatt jedes Element einzeln zu entfernen?

----------- bearbeiten ----------------

Jedes Listenelement hat einige Daten darauf angebracht ist, und einen Click-Handler wie folgt aus:

$('#foo').delegate('li', 'click', function() { 
    alert('hi!'); 
}); 

// adds element to the list at runtime 
function addListElement() { 
    var element = $('<li>hi</hi>'); 
    element.data('grade', new Grade()); 
} 

schließlich möchte ich hinzufügen Tasten pro Listenelement zu - so sieht es aus wie leer() ist der Weg zu gehen, um sicherzustellen, dass keine Speicherlecks gibt es?

+0

Effizient in welcher Hinsicht? Leistung, Lesbarkeit? – Gumbo

+0

Zu @ Gumbo Fragen hinzufügen, wie viel Sorge ist auch Speicher? Verfügen diese Elemente über Ereignishandler? –

+0

Gegeben die aktualisierte Antwort, yes '.empty()' wäre der Weg zu gehen, um die Daten aus '$ .cache' zu ​​löschen, die' element.data ('grade', new Grade()); 'addiert –

Antwort

137

können Sie .empty() verwenden, wie this:

$("#foo").empty(); 

From the docs:

alle Kinder entfernen Knoten des Satzes von abgestimmten Elementen aus dem DOM.

+5

Auch erwähnenswert (aus der Dokumentation) * Um Speicherlecks zu vermeiden, entfernt jQuery andere Konstrukte wie Daten und Event-Handler von den Kindelementen vor dem Entfernen der Elemente selbst. * – user113716

+1

@patrick - +1, ein weiterer Grund, diese Route über die oft empfohlen '.html ('')', da Daten nicht auf dem Element überhaupt gespeichert werden viele Leute vergessen das Leck, das verursacht. –

+1

+1 Auch, wenn Sie sicher sind, dass keine Ereignisse an die Kinder des Elternteils '$ (" # foo ") [0] gebunden wurden .innerHTML =" ";' wird schneller sein. Seien Sie vorsichtig, dass Sie keine Speicherlecks verursachen, wenn Sie Elemente auf diese Weise entfernen ("empty()" ist bereits sehr vorsichtig, um sicherzustellen, dass dies nicht geschieht, besonders im IE). –

3

Ein anderer Benutzer vorgeschlagen,

.empty() 

gut genug ist, weil es alle absteigenden Knoten innerhalb dieser Knoten gespeichert (beide tag-Knoten und Text-Knoten) und alle Arten von Daten entfernt. Siehe JQuery's API empty documentation.

Wenn Sie Daten zu halten, wie Event-Handler zum Beispiel, sollten Sie

.detach() 

verwenden wie auf dem JQuery's API detach documentation beschrieben.

Die Methode .remove() könnte für ähnliche Zwecke nützlich sein.

Verwandte Themen