JavaScript DOMでは、childNodes.lengthは要素ノードとテキストノードの両方の数を返します。要素のみの子ノードの数だけを数える方法はありますか?
例えば、 childNodes.length
of div#posts
2を期待したときに、6を返します。
<div id="posts">
<!-- some comment -->
<!-- another comment -->
<div>an element node</div>
<!-- another comment -->
<span>an element node</span>
a text node
</div>
直接ではありません。テキストノード(コメントなどを含む)は子ノードです。
最善の策は、childNodes配列を反復処理し、nodeType == Node.ELEMENT_NODE
でそれらのノードのみをカウントアップすることです。 (そして、そうするための関数を書いてください。)
Element.children
、しかしIE(最大8) コメントノードを考慮するようです も。
Node.nodeType (Mozillaのドキュメントは素晴らしいリソースだと思うので)でフィルタリングできます。
document.querySelectorAll('#posts > *')
を使用できます:
var children = document.querySelectorAll('#posts > *');
console.log('Number of children: ' + children.length);
<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>