У меня есть список, я просто хочу удалить из него все дочерние узлы. Какой самый эффективный способ использования jquery? Вот что у меня есть:
<ul id='foo'>
<li>a</li>
<li>b</li>
</ul>
var thelist = document.getElementById("foo");
while (thelist.hasChildNodes()){
thelist.removeChild(thelist.lastChild);
}
есть ли ярлык вместо удаления каждого элемента по одному?
----------- Редактировать ----------------
К каждому элементу списка прикреплены некоторые данные и такой обработчик кликов:
$('#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());
}
в конце концов, я мог бы добавить кнопки для каждого элемента списка - так что похоже, что empty () - это выход, чтобы убедиться, что нет утечек памяти?
.empty()
можно было бы пойти «да», чтобы удалить данные из$.cache
этихelement.data('grade', new Grade());
добавлений.JS
, вы можетеtheList.innerHTML=""
Ответы:
Вы можете использовать
.empty()
вот так :$("#foo").empty();
Из документов :
источник
.html('')
, поскольку данные вообще не хранятся в элементе, многие люди забывают об утечке, которая вызывает.$("#foo")[0].innerHTML="";
будет быстрее. Просто будьте осторожны, вы не вызовете утечки памяти при удалении элементов таким образом (empty()
уже очень заботятся о том, чтобы этого не произошло, особенно в IE).$.cache
вместе с остальной частью данных, они не будут удалены с помощью вызовов настроек html.Другой пользователь предложил,
.empty()
достаточно хорошо, потому что он удаляет все узлы-потомки (как узлы тегов, так и текстовые узлы) И все виды данных, хранящиеся внутри этих узлов. См . Пустую документацию API JQuery .
Если вы хотите хранить данные, например, обработчики событий, вам следует использовать
.detach()
как описано в документации по отсоединению JQuery API .
Метод .remove () может быть полезен для аналогичных целей.
источник