DOM4 compareDocumentPositionprzeglądarka porównuje pozycję dokumentu
Chcę zaimplementować polecenie compareDocumentPosition. Resig dokonał great start at doing just this. Wziąłem swój kod i neatened go
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;
}
Działa to dla Element
ale nie robi dla Text
lub DocumentFragment
. Dzieje się tak, ponieważ IE8 nie daje .sourceIndex
na tych węzłach. (Nie daje .contains
albo ale Naprawiłem już ten problem)
Jak skutecznie pisać bitu +=4
i +=2
które odpowiadają DOCUMENT_POSITION_FOLLOWING i DOCUMENT_POSITION_PRECEDING.
Dla dodatkowego odniesienia te dwa są określone przez drzewo rzędu które DOM4 określa jako
Przedmiotem A poprzedzające obiektu B, gdy A i B są w tym samym drzewa i jest przed B w kolejności drzewa .
Obiekt A podąża za obiektem B, jeśli A i B znajdują się w tym samym drzewie, a A występuje po B w kolejności drzewa.
Kolejność drzew jest w przedsprzedaży, pierwsze przemieszczenie na głębokość.
Większość nowoczesnych przeglądarek implementuje to (w tym IE9). Więc trzeba tylko coś, co działa w IE8 (nie dbam o IE6/7, ale czy to działa super!)
Oh Raynos, to niesamowite . Dziękuję za odpowiedź na moje pytanie. – Raynos
Wszystko w porządku ...? –
@TimDown Nie spałem wystarczająco. – Raynos