DOM4 compareDocumentPositionnavegador cruz comparar documento posición
Quiero implementar compareDocumentPosition. Resig ha realizado un great start at doing just this. Me he tomado su código y neatened arriba
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;
}
Esto funciona para Element
pero no para Text
o DocumentFragment
. Esto es porque IE8 no da .sourceIndex
en esos nodos. (No da .contains
bien pero me he fijado ese problema ya)
¿Cómo escribo de manera eficiente la +=4
y +=2
bits que corresponden a DOCUMENT_POSITION_FOLLOWING y DOCUMENT_POSITION_PRECEDING.
Para referencia adicional a los dos están definidos por el árbol de orden que DOM4 define como
Un objeto A se precede un objeto B si A y B están en el mismo árbol y A viene antes de B con el fin árbol .
Un objeto A sigue a un objeto B si A y B están en el mismo árbol y A aparece después de B en orden de árbol.
La orden de árbol es preordenar, recorrido transversal en profundidad.
La mayoría de los navegadores modernos implementan esto (incluido IE9). Por lo que sólo necesita algo que funciona en IE8 (no me importa IE6/7, pero si funciona increíble!)
Oh Raynos, que impresionante . Gracias por responder mi pregunta – Raynos
¿Estás bien ...? –
@TimDown No he dormido lo suficiente. – Raynos