それ以来、私はこれらの方法について多くの研究を行い、多くの機会に使用してきました。これらは多くのタスク (特に構造に関する抽象 DOM セレクター) で非常に役立つことが証明されています。
1. DOMElement.contains(DOMNode)
このメソッドは、DOM ノードが別の DOM 要素に含まれているかどうかを判断するために IE で初めて使用されました。
このメソッドは、CSS セレクターのトラバーサル (「#id1 #id2」など) を最適化する場合に役立ちます。 getElementById を介して要素を取得し、.contains() を使用して #id1 に実際に #id2 が含まれているかどうかを判断できます。
注: DOM ノードと DOM 要素が一貫している場合、要素にそれ自体を含めることはできませんが、 .contains() は true を返します。
これは、Internet Explorer、Firefox、Opera、Safari で実行できる単純な実行ラッパーです。
関数 contains(a, b) {
return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(arg) & 16); >
2. NodeA.compareDocumentPosition(NodeB)
このメソッドは DOM レベル 3 仕様の一部であり、2 つの DOM ノード間の相互の位置を決定できます。このメソッドは .contains() よりも強力です。このメソッドの応用例の 1 つは、DOM ノードを特定の正確な順序に並べ替えることです。
このメソッドを使用すると、要素の位置に関する一連の情報を決定できます。これらすべての情報はビット コード (ビット、バイナリ ビットとも呼ばれます) を返します。
それらについてはほとんど知られていません。ビットコードは複数のデータを単純な数値 (訳者注: 0 または 1) として格納します。個々の数値の最終的なオン/オフ (翻訳者注: オン/オフは 0/1 に対応します) により、最終的な結果が得られます。
これは、NodeA.compareDocumentPosition(NodeB) から返された結果と、取得できる情報です。
ビット番号 意味
000000 0 要素は一貫しています
000001 1 ノードは別のドキュメント内にあります (またはドキュメントの外にあります)
000010 2 ノード B はノード A の前にあります
000100 4 ノード A は
001000 より前にノード B にあります。 8 ノード B にはノード A が含まれます
010000 16 ノード A にはノード B が含まれます
100000 32 ブラウザのプライベート使用
これは、考えられる結果を意味します