Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

JavaScript辞典

  1. トップページ
  2. JavaScript辞典
  3. HTML要素.children / firstElementChild / lastElementChild

HTML要素.children / firstElementChild / lastElementChild対応: DOM Level 1(1998)

HTML要素の子要素を取得するプロパティです。子要素の一覧や、最初・最後の子要素を取得できます。

構文
// 子要素の一覧を取得します。
var elements = element.children;

// 最初の子要素を取得します。
var first = element.firstElementChild;

// 最後の子要素を取得します。
var last = element.lastElementChild;
プロパティ一覧
プロパティ概要
children子要素のうちHTML要素のみをHTMLCollectionとして返します。テキストノードやコメントノードは含まれません。
childNodesテキストノードやコメントノードを含むすべての子ノードをNodeListとして返します。
firstElementChild最初の子要素(HTML要素)を返します。子要素が存在しない場合は『null』を返します。
lastElementChild最後の子要素(HTML要素)を返します。子要素が存在しない場合は『null』を返します。
firstChild最初の子ノードを返します。テキストノードやコメントノードも対象に含まれます。
lastChild最後の子ノードを返します。テキストノードやコメントノードも対象に含まれます。
サンプルコード
<ul id="list">
	<li>項目1</li>
	<li>項目2</li>
	<li>項目3</li>
</ul>
var list = document.querySelector("#list");

// children でHTML要素のみの子要素一覧を取得します。
console.log(list.children.length); // 『3』と出力されます。
console.log(list.children[0].textContent); // 『項目1』と出力されます。
console.log(list.children[2].textContent); // 『項目3』と出力されます。

// childNodes はテキストノードも含むため数が異なります。
console.log(list.childNodes.length); // 『7』と出力されます。タグ間の空白もテキストノードとして数えられます。

// 最初と最後の子要素を取得します。
console.log(list.firstElementChild.textContent); // 『項目1』と出力されます。
console.log(list.lastElementChild.textContent); // 『項目3』と出力されます。

// firstChild はテキストノードが返される場合があります。
console.log(list.firstChild); // 改行と空白のテキストノードが返されます。
実行結果
list.children.length;                    // 3
list.children[0].textContent;            // 項目1
list.children[2].textContent;            // 項目3
list.childNodes.length;                  // 7
list.firstElementChild.textContent;      // 項目1
list.lastElementChild.textContent;       // 項目3

『children』はHTML要素のみ3つを返しますが、『childNodes』はタグ間の空白テキストノード4つを含めた7つを返します。

概要

『HTML要素.children』はHTML要素のみの子要素をHTMLCollectionとして返すプロパティです。『HTML要素.childNodes』はテキストノードやコメントノードも含むすべての子ノードを返すため、通常のDOM操作ではHTML要素だけを扱う『HTML要素.children』を使う方が予期しない結果を防げます。

HTMLのソースコードでは、タグとタグの間にある改行やインデントの空白もテキストノードとして扱われます。そのため『childNodes』や『firstChild』『lastChild』を使うと、空白のテキストノードが取得されてしまう場合があります。HTML要素だけを確実に取得したい場合は『children』『firstElementChild』『lastElementChild』を使用してください。

子要素の数を数えたい場合は『children.length』で取得できます。特定の条件に一致する子要素を探したい場合は『HTML要素.querySelector()』や『HTML要素.querySelectorAll()』の方が便利です。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。