Tengo una lista, solo quiero eliminar todos los nodos secundarios de ella. ¿Cuál es la forma más eficiente de usar jquery? Esto es lo que tengo:
<ul id='foo'>
<li>a</li>
<li>b</li>
</ul>
var thelist = document.getElementById("foo");
while (thelist.hasChildNodes()){
thelist.removeChild(thelist.lastChild);
}
¿Existe un atajo en lugar de eliminar cada elemento, uno a la vez?
----------- Editar ----------------
Cada elemento de la lista tiene algunos datos adjuntos y un controlador de clic como este:
$('#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());
}
eventualmente también podría agregar botones por elemento de la lista, por lo que parece que vacío () es el camino a seguir, para asegurarme de que no haya pérdidas de memoria.
.empty()
sería el camino a seguir, para borrar los datos de$.cache
que seelement.data('grade', new Grade());
añade en.JS
, puedes hacerlotheList.innerHTML=""
Respuestas:
Se puede utilizar
.empty()
, como este :$("#foo").empty();
De los documentos :
fuente
.html('')
, ya que los datos no se almacenan en el elemento en absoluto, muchas personas olvidan la fuga que causa.$("#foo")[0].innerHTML="";
, será más rápido. Solo tenga cuidado de no causar pérdidas de memoria al eliminar elementos de esta manera (empty()
ya tiene mucho cuidado para asegurarse de que esto no suceda, especialmente en IE).$.cache
con el resto de cualquier cosa en los datos, no se eliminarán con las llamadas de configuración html.Otros usuarios sugirieron,
.empty()
es suficiente, porque elimina todos los nodos descendientes (nodos de etiqueta y nodos de texto) Y todo tipo de datos almacenados dentro de esos nodos. Consulte la documentación vacía de la API de JQuery .
Si desea conservar datos, como controladores de eventos, por ejemplo, debe usar
.detach()
como se describe en la documentación separada de la API de JQuery .
El método .remove () podría ser útil para propósitos similares.
fuente