DOM

Node.compareDocumentPosition() メソッド

 編集:2022.10.30 by T.A.

[Edge]。→

Node と指定の別ノードとの位置を比較し数値で返します。

構文
Node.compareDocumentPosition(otherNode)
Node Node
otherNode 比較する別ノード Node
戻り値

整数値。Node から見た otherNode の相対位置を表します。

Node で以下の定数プロパティがビット マスクとして定義されています。

定義されている名称 戻り値 状態
0 一致
DOCUMENT_POSITION_DISCONNECTED 1 両方のノードが、異なる文書、または同じ文書の異なるツリーにあります。
DOCUMENT_POSITION_PRECEDING 2 otherNodeNode より、両者を含むツリーの前順深さ優先走査で前にある(祖先ノード、前にある兄弟ノード、前にある兄弟ノードの子孫ノード、祖先ノードの前にある兄弟ノードなど)か、(接続されていないのであれば)任意だが一貫した順序で、そのノードよりも前に位置します。
DOCUMENT_POSITION_FOLLOWING 4 otherNodeNode より、両者を含むツリーの前順深さ優先走査で後にある(子孫ノード、後にある兄弟ノード、後にある兄弟ノードの子孫ノード、祖先ノードの後にある兄弟ノードなど)か、(接続されていないのであれば)任意だが一貫した順序で、そのノードよりも後に位置します。
DOCUMENT_POSITION_CONTAINS 8 otherNodeNode の祖先ノードです。
DOCUMENT_POSITION_CONTAINED_BY 16 otherNodeNode の子孫ノードです。
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC 32 その結果は、任意や実装固有の動作に依存し、移植性は保証されません。

複数の条件に適合する場合、複数のビットが設定されることがあります。

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

mdn
var head = document.getElementsByTagName('head').item(0);

if ( head.compareDocumentPosition(document.body) & Node.DOCUMENT_POSITION_FOLLOWING ) {
  console.log("head 要素は body 要素より前に記述されています。");
} else {
  console.log("head 要素は body 要素の前に配置しなくてはなりません。");
}

HTML:

<SPAN id=IdTest1>[SPAN要素1<B id=IdB>[B要素]</B>]</SPAN><BR>
<SPAN id=IdTest2>[SPAN要素2]</SPAN><BR>

JavaScript:

D=IdTest1.compareDocumentPosition(IdTest2);  //4。IdTest2 は IdTest1 よりも後にある。
D=IdTest1.compareDocumentPosition(IdB);      //20。IdB は IdTest1 の子孫ノードで、IdTest1 よりも後にある。

D=D.toString(16);  //14(16進)

テスト