JavaScript DOM childNodes.length也返回文本节点的数量

Sam*_*iew 20 html javascript dom html-parsing

在JavaScript DOM中,childNodes.length返回元素和文本节点的数量.有没有办法只计算仅元素子节点的数量?

例如,当我预期2时childNodes.length,div#posts将返回6:

<div id="posts">
    <!-- some comment -->
    <!-- another comment -->
    <div>an element node</div>
    <!-- another comment -->
    <span>an element node</span>
    a text node
</div>
Run Code Online (Sandbox Code Playgroud)

mgi*_*uca 22

不是直接的.文本节点(包括注释等)是子节点.

最好的办法是遍历childNodes数组并仅计算那些节点nodeType == Node.ELEMENT_NODE.(并编写一个函数来执行此操作.)

  • 较旧版本的IE不会暴露`Node`常量,因此为了兼容性,您需要直接使用`Node.ELEMENT_NODE`的值,即`1`. (5认同)

Fel*_*ing 10

你可以使用Element.children,但IE(最多8个)似乎也考虑了注释节点.


Con*_*Fan 6

您可以使用document.querySelectorAll('#posts > *')

var children = document.querySelectorAll('#posts > *');
console.log('Number of children: ' + children.length);
Run Code Online (Sandbox Code Playgroud)
<div id="posts">
    <!-- some comment -->
    <!-- another comment -->
    <div>an element node
        <span>a grand-child node</span>
    </div>
    <!-- another comment -->
    <span>an element node</span>
    a text node
</div>
Run Code Online (Sandbox Code Playgroud)