Node: compareDocumentPosition() メソッド

compareDocumentPosition()Node インターフェイスのメソッドで、引数のノードの位置を、呼び出されたノードからの相対位置で報告します。

構文

js
compareDocumentPosition(otherNode)

引数

otherNode

Node で、このノードとの相対位置を報告するノードを指定します。

返値

整数値で、 otherNodenode から見た相対位置を、以下の Node の定数プロパティを組み合わせたビットマスクで表します。

Node.DOCUMENT_POSITION_DISCONNECTED (1)

両方のノードが、異なる文書、または同じ文書の異なるツリーにあります。

Node.DOCUMENT_POSITION_PRECEDING (2)

otherNode はこのノードより、両者を含むツリーの前順深さ優先走査で前にある(祖先ノード、前にある兄弟ノード、前にある兄弟ノードの子孫ノード、祖先ノードの前にある兄弟ノードなど)か、(接続されていないのであれば)任意だが一貫した順序で、そのノードよりも前に位置します。

Node.DOCUMENT_POSITION_FOLLOWING (4)

otherNode はこのノードより、両者を含むツリーの前順深さ優先走査で後にある(子孫ノード、後にある兄弟ノード、後にある兄弟ノードの子孫ノード、祖先ノードの後にある兄弟ノードなど)か、(接続されていないのであれば)任意だが一貫した順序で、そのノードよりも後に位置します。

Node.DOCUMENT_POSITION_CONTAINS (8)

otherNode はこのノードの祖先ノードです。

Node.DOCUMENT_POSITION_CONTAINED_BY (16)

otherNode はこのノードの子孫ノードです。

Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC (32)

その結果は、任意や実装固有の動作に依存し、移植性は保証されません。

複数の条件に適合する場合、複数のビットが設定されることがあります。例えば、 otherNode が文書中でより先にあり、かつ compareDocumentPosition() が呼び出されたノードを含んでいれば、 DOCUMENT_POSITION_CONTAINSDOCUMENT_POSITION_PRECEDING の両ビットが設定され、 10 (0x0A) という値になります。

js
const head = document.head;
const body = document.body;

if (head.compareDocumentPosition(body) & Node.DOCUMENT_POSITION_FOLLOWING) {
  console.log("正しい形式の文書です");
} else {
  console.error("<head> が <body> の前にありません");
}

メモ: compareDocumentPosition() の返値はビットマスクですので、意味のある結果を得るにはビット AND 演算子を使用する必要があります。

仕様書

Specification
DOM Standard
# ref-for-dom-node-comparedocumentposition①

ブラウザーの互換性

BCD tables only load in the browser

関連情報