如何在javascript中删除textNodes,或者只是跳过它

9 浏览
0 Comments

如何在javascript中删除textNodes,或者只是跳过它

我发现自己在使用JavaScript时遇到了childNodeschildren属性。我想知道它们之间的区别是什么。另外,有没有一个更好的选择?

0
0 Comments

如何从JavaScript中删除textNodes或者跳过它们

在理解这个问题之前,需要了解以下几点:

1. `.children`是Element的属性,只有Element才有这个属性,而且这些children都是Element类型。

2. 然而,`.childNodes`是Node的属性,`.childNodes`可以包含任何类型的节点。

具体举个例子:

let el = document.createElement("div");
el.textContent = "foo";
el.childNodes.length === 1; // 包含一个Text节点子节点
el.children.length === 0;   // 没有Element子节点

大多数情况下,我们希望使用`.children`,因为通常我们不希望在DOM操作中循环遍历Text或Comment节点。

如果确实需要操作Text节点,可能需要使用`.textContent`代替。

这里还有一些补充说明:

1. 技术上讲,`children`是`ParentNode`的属性,它是Element包含的一个mixin。

2. 由于`.children`是`HTMLCollection`,它只能包含元素,所以它们都是元素节点。

3. 类似地,`.childNodes`可以包含任何类型的节点,因为它是`NodeList`类型。

4. 或者使用`.innerText`,可以在这里了解到它们之间的区别。

是的,IE似乎存在一些问题。

实际上,`children`是`parentnode`接口的属性,而不是Element的。

iOS 8.3(或许其他版本也是)不支持在XML文档上使用`.children`。

在Microsoft Edge上,XML节点可能会出现问题,它似乎不喜欢`children`。

这是“element vs. node”的自然延伸。

文章来源:

- [quirksmode.org](http://www.quirksmode.org/dom/w3c_core.html#t71)

- [usonsci.wordpress.com](http://usonsci.wordpress.com/2014/09/30/html-children-vs-childnodes/)

- [stackoverflow.com](http://stackoverflow.com/questions/132564)

- [jsfiddle.net](http://jsfiddle.net/fbwbjvch/1/)

0