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

时间:2010-06-15 11:45:40

标签: jquery

我有一个列表,我只想从中删除所有子节点。使用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(),确保没有内存泄漏?

2 个答案:

答案 0 :(得分:166)

您可以使用.empty(),例如this

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

From the docs

  

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

答案 1 :(得分:4)

其他用户建议,

.empty()

是好的,因为它删除了所有后代节点(标记节点和文本节点)以及存储在这些节点内的所有类型的数据。 请参阅JQuery's API empty documentation

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

.detach()

JQuery's API detach documentation所述。

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