Ich habe eine Liste, ich möchte nur alle untergeordneten Knoten daraus entfernen. Was ist der effizienteste Weg mit jquery? Das habe ich:
<ul id='foo'>
<li>a</li>
<li>b</li>
</ul>
var thelist = document.getElementById("foo");
while (thelist.hasChildNodes()){
thelist.removeChild(thelist.lastChild);
}
Gibt es eine Verknüpfung, anstatt jedes Element einzeln zu entfernen?
----------- Bearbeiten ----------------
An jedes Listenelement sind einige Daten angehängt, und ein Klick-Handler wie folgt:
$('#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());
}
Möglicherweise füge ich auch Schaltflächen pro Listenelement hinzu. Es sieht also so aus, als ob leer () der richtige Weg ist, um sicherzustellen, dass keine Speicherlecks auftreten.
.empty()
wäre der Weg zu gehen, zu löschen , die Daten aus ,$.cache
dasselement.data('grade', new Grade());
fügt in.JS
, können Sie tuntheList.innerHTML=""
Antworten:
Sie können
.empty()
wie folgt verwenden :$("#foo").empty();
Aus den Dokumenten :
quelle
.html('')
, da überhaupt keine Daten auf dem Element gespeichert sind. Viele Menschen vergessen das Leck, das verursacht.$("#foo")[0].innerHTML="";
ist dies schneller. Achten Sie nur darauf, dass Sie beim Entfernen von Elementen auf diese Weise keine Speicherlecks verursachen (es wirdempty()
bereits sehr darauf geachtet, dass dies nicht geschieht, insbesondere im IE).$.cache
mit den restlichen Daten gespeichert werden, werden sie bei den HTML-Einstellungsaufrufen nicht entfernt.Ein anderer Benutzer schlug vor,
.empty()
ist gut genug, weil es alle untergeordneten Knoten (sowohl Tag-Knoten als auch Textknoten) UND alle Arten von Daten entfernt, die in diesen Knoten gespeichert sind. Weitere Informationen finden Sie in der leeren Dokumentation zur JQuery-API .
Wenn Sie Daten behalten möchten, wie z. B. Ereignishandler, sollten Sie diese verwenden
.detach()
wie in der API-Trennungsdokumentation von JQuery beschrieben .
Die Methode .remove () könnte für ähnliche Zwecke nützlich sein.
quelle