私はcompareDocumentPositionを実装したい. Resig はまさにこれを行う上で素晴らしいスタートを切りました。私は彼のコードを取得し、それを整理しました
function compareDocumentPosition(other) {
var ret = 0;
if (this.contains) {
if (this !== other && this.contains(other)) {
ret += 16;
}
if (this !== other && other.contains(this)) {
ret += 8;
}
if (this.sourceIndex >= 0 && other.sourceIndex >= 0) {
if (this.sourceIndex < other.sourceIndex) {
ret += 4;
}
if (this.sourceIndex > other.sourceIndex) {
ret += 2;
}
} else {
ret += 1;
}
}
return ret;
}
これは には機能しますが、またはElement
には機能しません。これは、IE8 がこれらのノードで提供しないためです。(それはどちらも与えませんが、私はすでにその問題を修正しました)Text
DocumentFragment
.sourceIndex
.contains
DOCUMENT_POSITION_FOLLOWINGおよびDOCUMENT_POSITION_PRECEDING+=4
に対応するand+=2
ビットを効率的に記述するにはどうすればよいですか。
追加の参照として、これら 2 つは DOM4 が定義するツリー順序によって定義されます。
オブジェクト A と B が同じツリーにあり、ツリーの順序で A が B より前にある場合、オブジェクト A はオブジェクト B よりも前になります。
オブジェクト A と B が同じツリーにあり、ツリー順で A が B の後にある場合、オブジェクト A はオブジェクト B をフォローしています。
ツリーの順序は事前順、深さ優先のトラバーサルです。
最新のブラウザーのほとんどはこれを実装しています (IE9 を含む)。したがって、IE8 で動作するものだけが必要です (IE6/7 は気にしませんが、うまく動作する場合は!)