Element.children- 全ての子要素を取得する
投稿日: / 更新日:
JavaScriptの、Elementオブジェクトのchildren
は全ての子要素を取得するプロパティです。
説明
Elementオブジェクトのchildrenプロパティは、その要素の全ての子要素を含むHTMLCollection(≠配列)です。要素が対象であって、テキストノードやコメントノードはカウントされません。
<ul>
<li>要素1</li>
<li>要素2</li>
<li>要素3</li>
</ul>
// ulElement = <ul> ... </ul>
// ul要素のchildren
// ulElement.children[0] = <li>要素1</li>
// ulElement.children[1] = <li>要素2</li>
// ulElement.children[2] = <li>要素3</li>
例えば、上記ul要素のchildrenプロパティは、3つのli要素を含むHTMLCollection(≠配列)です。では、childrenプロパティとchildNodesプロパティの違いは何でしょうか?それは、childrenプロパティは「子要素」なのに対して、childNodesプロパティは「子ノード」だということです。もっと簡単に言うと「テキストノードとコメントノードを含むか否か」です。
<ul>↓
<li>要素1</li>↓
<li>要素2</li>↓
<li>要素3</li>↓
</ul>
// ulElement = <ul> ... </ul>
// ul要素のchildNodes
// ulElement.children[0] = TextNode (改行とタブ)
// ulElement.children[1] = <li>要素1</li>
// ulElement.children[2] = TextNode (改行とタブ)
// ulElement.children[3] = <li>要素2</li>
// ulElement.children[4] = TextNode (改行とタブ)
// ulElement.children[5] = <li>要素3</li>
// ulElement.children[6] = TextNode (改行)
childNodesプロパティは全ての子ノードを含むノードリストです。子要素ではなく子ノード。例えば同じul要素のchildNodesプロパティは、合計で7つのノードが含まれます。これは、li要素とli要素の間にある改行やタブ文字がテキストノードとして、ul要素の子ノードにカウントされるからです。用途に合わせて、childrenプロパティとchildNodesプロパティを使い分けましょう。
HTMLCollectionは配列と似て非なるものです。配列のようにhoge[0]、hoge[1]とキー番号で参照したりlengthプロパティで要素数を確認できますが、forEach()
など、配列に使えるメソッドは利用できません。
サンプルコード
<ul id="target">
<li>要素1</li>
<li>要素2</li>
<li>要素3</li>
</ul>
// 要素を取得
var ulElement = document.getElementById( "target" ) ;
// 全ての子要素を取得
var children = ulElement.children ;
デモ
ul要素のchildrenプロパティを取得して表示します。コンソールでHTMLCollection(≠配列)の中身を確認できます。
構文
readonly HTMLCollection children = Element.children
返り値
項目 | 説明 |
---|---|
children | 全ての子要素を含んだHTMLCollection。 |
関連項目
- Location - ブラウザロケーションのオブジェクト。
- Location.assign() - コンテンツをロードして表示する。
- Location.reload() - ドキュメントをリロードする。
- Location.replace() - 現在のURLを置換する。
外部リンク
- HTML Living Standard - WHATWGによる仕様書。