从父项中删除所有子节点?

use*_*114 75 jquery

我有一个列表,我只想从中删除所有子节点.使用jquery最有效的方法是什么?这就是我所拥有的:

<ul id='foo'>
  <li>a</li>
  <li>b</li>
</ul>

var thelist = document.getElementById("foo");   
while (thelist.hasChildNodes()){
    thelist.removeChild(thelist.lastChild);
}
Run Code Online (Sandbox Code Playgroud)

是否有快捷方式,而不是一次删除一个项目?

-----------编辑----------------

每个列表元素都附加了一些数据,还有一个点击处理程序,如下所示:

$('#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());
}
Run Code Online (Sandbox Code Playgroud)

最终我也可以为每个列表项添加按钮 - 所以它看起来像是empty()是要走的路,以确保没有内存泄漏?

Nic*_*ver 175

你可以.empty()这样使用:

$("#foo").empty();
Run Code Online (Sandbox Code Playgroud)

来自文档:

从DOM中删除匹配元素集的所有子节点.

  • 另外值得注意的是(来自docs)*为了避免内存泄漏,jQuery在删除元素本身之前从子元素中删除了其他构造,如数据和事件处理程序.* (6认同)

Mar*_*ina 5

其他用户建议,

.empty()
Run Code Online (Sandbox Code Playgroud)

足够好,因为它删除了所有后代节点(标签节点和文本节点)以及存储在这些节点内的所有类型的数据。请参阅JQuery 的 API 空文档

如果您希望保留数据,例如事件处理程序,您应该使用

.detach()
Run Code Online (Sandbox Code Playgroud)

JQuery 的 API 分离文档中所述

方法 .remove() 可用于类似目的。