要素の探索
ドキュメント内の要素(Element)はツリー構造になっています。
このツリー構造の要素を探索する方法を試してみます。
実際に下記のHTMLファイルを作成し、サーバに設置してみました。
サンプル画面
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>
<div id="test1">
	<div id="test1_1">
		a
	</div>
	<div id="test1_2">
		b
		<div id="test1_2_1">
			b1
		</div>
		<div id="test1_2_2">
			b2
		</div>
		<div id="test2_2_1">
			id_b1
		</div>
		<div id="test2_2_2">
			id_b2
		</div>
	</div>
	<div id="test1_3">
		b
	</div>
</div>
<script type="text/javascript">
	let test1_2_1 = document.getElementById("test1_2_1");
	// オブジェクトの内容を確認する
	for(var key in test1_2_1){
		console.log(key + " : " + test1_2_1[key]);
	}
	console.log("test1_2_1 -> " + test1_2_1);
	console.log("test1_2_1.parentNode -> " + test1_2_1.parentNode);
	console.log("test1_2_1.parentElement -> " + test1_2_1.parentElement);
</script>
</body>
</html>
上記のHTMLソースには「id=”test1″」のdivタグ内にネストされた形で
「id=”test1_1″」
「id=”test1_2″」
「id=”test1_3″」
のdivタグがそれぞれあります。
この状態でツリー構造の要素を取得する方法を試してみます。
具体的には以下の要素取得のコードを書いてみます。
parentNodeによる探索
要素の「test1_2_1」に対して、「parentNode」を使って親要素を取得してみます。
以下のように取得のtest1_2_1を取得し、取得した要素に.parentNodeを使って親要素を取得してみます。
	let test1_2_1 = document.getElementById("test1_2_1");
	console.log("test1_2_1.parentNode -> " + test1_2_1.parentNode);
結果は、次のように出力されます。
test1_2_1 -> [object HTMLDivElement] test1_2_1.parentNode -> [object HTMLDivElement] test1_2_1.parentElement -> [object HTMLDivElement]
.parentNodeと取得しても、.parentElementと取得しても、出力内容に違いはないように見えますが、
厳密には異なる取得方法になるので、使い分けが必要です。
.parentNodeはidが「test1_2_1」の親ノードの「test1_2」のNodeを示します。
また、.parentElement については、Nodeを親に持つインターフェースで、XMLで使用されます。