LoginSignup
4
3

More than 5 years have passed since last update.

Node.compareDocumentPositionで、要素の位置を比較する

Posted at

要素の位置関係を簡単に比較する。(DOM Level3)
nodeA.compareDocumentPosition(nodeB)
でnodeAとnodeBの位置関係を比較する。

サンプルは以下。

var elm = document.getElementById("elm");
document.addEventListener("click", function (e) {
  var res = elm.compareDocumentPosition(e.target);

  if (res === 0 || res & res.DOCUMENT_POSITION_CONTAINED_BY) {
    // elmまたはelm内のノードがクリックされた時の処理
  }
}, false);

また返り値はビットになっていて、以下の値が返ってくる。
複数の状態があり得る(例えば、「含まれていて」「後に存在する」など)ので、
ビットの理論積を利用して判別する。

値の意味

  • DOCUMENT_POSITION_PRECEDING
    otherはnodeより前にあります。 (2)

  • DOCUMENT_POSITION_FOLLOWING
    otherはnodeより後にあります。 (4)

  • DOCUMENT_POSITION_CONTAINS
    otherはnodeを含んでいます。 (8)

  • DOCUMENT_POSITION_CONTAINED_BY
    otherはnodeに含まれています。 (16)

  • DOCUMENT_POSITION_DISCONNECTED
    otherとnodeは、同じ木構造にありません。 (1)

  • DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
    位置関係は実装依存です。 (32)

//実際の値
DOCUMENT_POSITION_DISCONNECTED = 0x01;
DOCUMENT_POSITION_PRECEDING = 0x02;
DOCUMENT_POSITION_FOLLOWING = 0x04;
DOCUMENT_POSITION_CONTAINS = 0x08;
DOCUMENT_POSITION_CONTAINED_BY = 0x10;
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3