DOM4 compareDocumentPositioncross browser confronta documento posizione
Voglio implementare compareDocumentPosition. Resig ha effettuato un great start at doing just this. Ho preso il suo codice e ripulì l'alto
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;
}
Questo funziona per Element
, ma non per Text
o DocumentFragment
. Questo perché IE8 non fornisce .sourceIndex
su quei nodi. (Non dà .contains
neanche ma ho risolto già questo problema)
Come faccio in modo efficiente scrivo il bit +=4
e +=2
che corrispondono a DOCUMENT_POSITION_FOLLOWING e DOCUMENT_POSITION_PRECEDING.
Per riferimento supplementare quei due sono definiti da alberi ordine che DOM4 definisce
Un oggetto A è precede un oggetto B se A e B sono nello stesso albero e A viene prima B per albero .
Un oggetto A segue un oggetto B se A e B si trovano nello stesso albero e A viene dopo B nell'ordine dell'albero.
L'ordine dell'albero è preordinato, attraversamento in profondità.
La maggior parte dei browser moderni lo implementa (incluso IE9). Quindi, avete solo bisogno di qualcosa che funziona in IE8 (non mi importa di IE6/7, ma se funziona impressionante!)
Oh Raynos, è impressionante . Grazie per aver risposto alla mia domanda – Raynos
Stai bene ....? –
@TimDown Non ho dormito abbastanza. – Raynos