删除所有子节点

Posted

技术标签:

【中文标题】删除所有子节点【英文标题】:Remove all child nodes 【发布时间】:2011-03-23 08:22:54 【问题描述】:

如何使用 Dojo 或纯 javascript<div id="test"></div> 中?

【问题讨论】:

Remove all the children DOM elements in div的可能重复 这可能也有帮助:***.com/questions/4401278/… 【参考方案1】:

虽然使用 el.innerhtml = "" 很诱人,而且通常这很有效,但更正确的方法是:

var el = document.getElementById('test');
while( el.hasChildNodes() )
    el.removeChild(el.lastChild);

这样做的原因是因为 IE 非常讨厌使用 innerHTML 进行表格操作(这在 MSDN 中的某处有记录)。

编辑:找到 MSDN 参考:http://msdn.microsoft.com/en-us/library/ms532998%28v=vs.85%29.aspx#TOM_Create

【讨论】:

我同意,稍微清理一下【参考方案2】:

dojo.empty(node) 将从节点中删除所有子节点,同时保留节点。

dojo.destroy(node) 将从节点中删除所有子节点,然后从其父节点中删除该节点。

【讨论】:

AMD - 将 dojo/dom-construct 导入为 domConstruct,然后调用 domConstruct.empty(node) 和 domConstruct.destroy(node)。【参考方案3】:

here 是你需要的:

dojo.empty("someId");

【讨论】:

【参考方案4】:
document.getElementById('yourDivID').innerHTML="";

【讨论】:

然而,有潜在的危险。这不适用于 IE 中的表格 不,你不对,我已经用 IE 测试过能够从 Div 中删除所有子节点。 我怀疑你没有完全测试过这个。正如微软自己在MSDN 上的文档所报告的那样:“由于表格所需的特定结构,table 和 tr 对象的 innerText 和 innerHTML 属性是只读的。要插入行和单元格,请更改内容和表格的属性,或者调整表格元素的大小,你必须使用 DOM。" 换句话说,如果你不完全理解它,依赖el.innerHTML = "" 是很危险的。 从 Internet Explorer 9 开始,您可以使用 W3C DOM 属性 textContent 与所有主流浏览器一起使用【参考方案5】:

您可以使用 W3C DOM 属性 textContent 作为 Microsoft 非标准 innerHTML/innerText 的替代品,它是 DOM3 的一部分,并且自第 9 版起受到包括 Internet Explorer 在内的所有主要浏览器的支持http://www.w3schools.com/jsref/prop_node_textcontent.asp

更新:innerHTML/innerText 现在是 HTML5 标准的一部分

【讨论】:

以上是关于删除所有子节点的主要内容,如果未能解决你的问题,请参考以下文章

EasyUI tree 选中父节点子节点全部选中,选中子节点父节点不选中

TreeView 点击触发父节点子节点的连锁反应选中与取消

计算特定XML节点c#的子节点数[重复]

实战之部署Redis哨兵模式-Docker版本

jQuery DOM节点操作 - 父节点子节点兄弟节点

ztree获取当前选中节点子节点id集合的方法(转载)