parentNodeとparentElementの違いは?

 

HTMLにおける「parentNode」と「parentElement」の違い

HTMLのDOM (Document Object Model) を扱う際によく遭遇するプロパティに、「parentNode」と「parentElement」があります。どちらも一見似たような役割を持つように見えますが、実際には明確な違いがあります。

ノードと要素の違い

「parentNode」と「parentElement」の違いを理解するには、まず「ノード」と「要素」の違いを理解する必要があります。

  • ノード (Node): DOMツリーを構成する基本的な構成要素です。要素、テキスト、コメントなど、様々な種類があります。
  • 要素 (Element): HTMLタグによって定義される、DOMツリーの一部です。属性を持つことができ、他のノード(要素を含む)を含めることができます。つまり、「要素」は「ノード」の一種ということになります。

parentNode プロパティ

parentNode プロパティは、任意のノードの親ノードを返します。これは、要素、テキストノード、コメントノードなど、あらゆる種類のノードに対して使用できます。

例えば、以下のHTMLを考えてみましょう。

<div>
    <p>段落テキスト</p>
</div>

このHTMLにおける各ノードの parentNode は以下のようになります。

ノード parentNode
<div> document
<p> <div>
段落テキスト <p>

parentElement プロパティ

parentElement プロパティは、要素の親要素のみを返します。もしノードが要素でない場合(テキストノードやコメントノードなど)、parentElementnull を返します。

先ほどのHTMLを例に、parentElement を見てみましょう。

ノード parentElement
<div> document.body
<p> <div>
段落テキスト null

いつ何を使うべきか

基本的には、要素の親要素を取得したい場合は parentElement を、任意のノードの親ノードを取得したい場合は parentNode を使用します。

しかし、以下の点に注意が必要です。

  • parentElement は、要素が直接documentに接続されていない場合(例えば、<script> 要素の親要素を取得しようとした場合など)、null を返すことがあります。
  • parentNode は、常に何らかのノードを返します。もし親ノードが存在しない場合は、document を返します。

コード例

以下は、parentNodeparentElement の使用例です。

<html>
<body>
    <div id="container">
        <p id="text">Hello World</p>
    </div>
    <script>
        var textNode = document.getElementById('text');
        console.log(textNode.parentNode);  // 出力: <div id="container">
        console.log(textNode.parentElement);  // 出力: <div id="container">
    </script>
</body>
</html>

参考文献

よくある質問

Q1: parentElementnull を返すのはどんな時ですか?

A1: 要素が直接documentに接続されていない場合、例えば、<script> 要素の親要素を取得しようとした場合などです。また、まだDOMに追加されていない要素の場合も null を返します。

Q2: parentNodeparentElement のどちらを使うべきですか?

A2: 基本的には、要素の親要素を取得したい場合は parentElement を、任意のノードの親ノードを取得したい場合は parentNode を使用します。

Q3: parentNodeparentElement は、jQueryではどのように使われますか?

A3: jQueryでは、 .parent() メソッドを使用して親要素を取得します。これは parentElement と同様に動作します。 parentNode に相当するメソッドはありません。

その他の参考記事:HTML DOM HTML コンテンツを変更する