要素の位置関係を簡単に比較する。(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;