【发布时间】:2018-06-26 21:31:27
【问题描述】:
传统上,在 Javascript 中删除节点的子节点的建议方法是执行以下操作:
while(node.firstChild) {
node.removeChild(node.firstChild);
}
最近,我尝试使用内置的 forEach() 方法删除节点的所有子节点:
node.childNodes.forEach(child => {
node.removeChild(child);
}
这并没有像我预期的那样运行。 forEach 没有删除所有子节点,而是停止执行,留下剩余节点。我最终不得不做的是使用 Array.from:
Array.from(node.childNodes)
然后我可以使用 forEach 删除节点。我之所以不能使用上面提到的传统方法,是因为由于某种原因,总是留下一个孩子,导致无限循环。
为什么 childNodes.forEach 方法没有像我想象的那样删除所有节点?我误会了什么?
【问题讨论】:
-
您看到结果中的模式了吗? jsfiddle.net/k3pjkp2a 想想每次迭代时节点列表会发生什么。
-
“内置”一词是指 ECMAScript §4.2 的特性,宿主提供的任何东西都是宿主方法。所以 NodeList 实例的 forEach 方法不是“内置”的,它是一个宿主方法。 ;-)
标签: javascript dom ecmascript-6 nodelist