parentNode と parentElement
parentNode と parentElement は、要素の親を取得するプロパティです。ほとんどの場合は同じ結果になりますが、微妙な違いがあります。
基本的な使い方
<div id="parent">
<p id="child">子要素</p>
</div>const child = document.getElementById('child');
console.log(child.parentNode); // div#parent
console.log(child.parentElement); // div#parent両者の違い
parentNode
親ノードを返す。Element 以外(Document など)も返す可能性がある
parentElement
親要素を返す。必ず Element か null
実際の違いが出るのは、html 要素の親を取得するときです。
const html = document.documentElement;
console.log(html.parentNode); // #document
console.log(html.parentElement); // nullhtml の親は Document ノードですが、これは Element ではないため parentElement は null を返します。
実用上はほぼ同じ
通常の DOM 操作では、ほとんど同じように使えます。
const element = document.getElementById('target');
// どちらも同じ結果になることが多い
const parent1 = element.parentNode;
const parent2 = element.parentElement;親をたどって探す
親を順番にたどっていくパターンです。
let current = element;
while (current.parentElement) {
console.log(current.tagName);
current = current.parentElement;
}ただし、特定の条件を満たす親を探すなら closest のほうが便利です。
// これより
let parent = element.parentElement;
while (parent) {
if (parent.classList.contains('container')) break;
parent = parent.parentElement;
}
// こちらのほうがシンプル
const container = element.closest('.container');実際に動かしてみよう
HTML
CSS
JavaScript
<div class="grandparent">
<div class="parent">
<button id="btn">親を表示</button>
</div>
</div>
<p id="result"></p>.grandparent { padding: 20px; background: #e3f2fd; }
.parent { padding: 15px; background: #bbdefb; }document.getElementById('btn').addEventListener('click', function() {
const parent = this.parentElement;
const grandparent = parent.parentElement;
document.getElementById('result').textContent =
'親: ' + parent.className + ' / 祖父: ' + grandparent.className;
});どちらを使うべきか
特別な理由がなければ parentElement を使うのがおすすめです。常に Element か null が返るので、型が明確になります。
// parentElement なら Element 型として扱える
const parent = element.parentElement;
if (parent) {
parent.classList.add('active');
}