JavaScript

最終更新日:
公開日:

レシピ

HTML・DOM

HTML要素が子要素を持つか確認する

特定のHTML要素が子要素を持つか確認する方法について解説します。

この記事のポイント

  • 子要素の対象をHTML要素のみに限定して判定する場合はchildElementCountプロパティを使う
  • テキストを子要素として含めて空要素か判定する場合はhasChildNodesメソッドを使う

子要素があるか確認する

特定のHTML要素が子要素を持つか確認したいときは、hasChildNodesメソッドを使うか、childElementCountプロパティを参照します。

hasChildNodesメソッドは子要素があるとtrueを返し、ない場合はfalseを返します。
このメソッドはテキストノード(要素内のテキスト)も1つの子要素として判断するため、h1要素p要素でもテキストが入っていれば、子要素があると判定してtrueを返します。

もう1つのchildElementCountプロパティは子要素の数を数値で返します。
もし子要素がない場合は0になります。
また、こちらのプロパティはテキストノードは子要素にカウントせず、あくまでHTML要素のみを対象にします。

以下のHTMLコードがあることを前提に、ul要素p要素に対してそれぞれ子要素があるか確認を行っていきます。

HTML コード例

<body>
	<h1>JavaScriptレシピ</h1>
	<ul id="list1">
		<li>テキスト<strong>1</strong></li>
		<li>テキスト<strong>2</strong></li>
		<li>テキスト<strong>3</strong></li>
		<li>テキスト<strong>4</strong></li>
		<li>テキスト<strong>5</strong></li>
	</ul>
	<p id="p1">I like cat.</p>
</body>

以下のコードで上記のHTMLに対してhasChildNodesメソッドchildElementCountプロパティを使って子要素があるか確認します。

JS コード例

let list_element = document.getElementById("list1");
console.log(list_element.hasChildNodes()); // true
console.log(list_element.childElementCount); // 5

let p_element = document.getElementById("p1");
console.log(p_element.hasChildNodes()); // true
console.log(p_element.childElementCount); // 0

ul要素は子要素として5つのli要素があるため、いずれの方法でも子要素があると判断できます。

一方、p要素については他のHTML要素を含まないため、子要素がないと判定したいところです。
しかしテキストノードがあるため、hasChildNodesメソッドtrueを返します。
もしp要素にテキストが入っていない「<p id="p1"></p>」のような状態であれば、hasChildNodesメソッドfalseを返します。

もう1つのchildElementCountプロパティ0を返してくれます。

以上の結果から、子要素をもつ基準を「HTML要素のみ」にして判定する場合はchildElementCountプロパティを使い、テキストも子要素として含めて空要素であるかを判定する場合はhasChildNodesメソッドを使うようにすることをオススメします。