Node: compareDocumentPosition() メソッド

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

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

関連情報