クラシカルDOMのparentNodeと新しいDOMのparentNodeの違いについて


クラシカルDOMでは、parentNodeは要素の直接の親要素を参照します。例えば、以下のHTMLコードを考えてみましょう。

<div id="parent">
  <span id="child"></span>
</div>

この場合、document.getElementById('child').parentNodeを実行すると、<div id="parent">要素が取得されます。つまり、parentNodeは要素の直接の親を指します。

一方、新しいDOMでは、parentNodeの振る舞いが変更されました。新しいDOMでは、parentNodeは論理的な親要素を参照します。つまり、要素が実際にDOMツリーのどこに配置されているかに関係なく、論理的な親を返します。

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

<div id="parent">
  <slot></slot>
</div>

この場合、<slot>要素は実際にはDOMツリーに配置されていませんが、slot.parentNodeを実行すると、<div id="parent">要素が取得されます。新しいDOMでは、<slot>要素の論理的な親要素として<div id="parent">を返すためです。

以下に、クラシカルDOMと新しいDOMのparentNodeの違いをコード例で示します。

クラシカルDOMの場合:

const childElement = document.getElementById('child');
const parentElement = childElement.parentNode;
console.log(parentElement); // <div id="parent">

新しいDOMの場合:

const slotElement = document.querySelector('slot');
const parentElement = slotElement.parentNode;
console.log(parentElement); // <div id="parent">

以上が、クラシカルDOMと新しいDOMのparentNodeの違いの簡単な説明とコード例です。これらの違いを理解することで、適切な操作を行うことができます。