raczej trudne, ja osobiście itterate się każde drzewo, póki nie znaleźli wspólny ansester, a następnie sprawdzić, który węzeł nadrzędny (lub rzeczywisty węzeł Jeśli tak niski) pochodzi pierwsza zaczynając firstChild i działa poprzez rodzeństwa, coś jak:
function OrderCheck(node1, node2){
var ar1 = [null, node1];
var ar2 = [null, node2];
for(var i = 1; ar1[i] != null; i++)
ar1[i+1]=ar1[i].parentNode;
for(var i = 1; ar2[i] != null; i++)
ar2[i+1]=ar2[i].parentNode;
ar1.reverse(); ar2.reverse(); // easier to work with.
i = 0;
while(ar1[i] === ar2[i]){
if(ar1[i] === null)
return 0;
else
i++
}
if(ar1[i] === null)
return 2;
if(ar2[i] === null)
return 1;
if(i != 0){
var n = ar1[i-1].firstChild;
do{
if(n === ar1[i])
return 1;
if(n === ar2[i])
return 2;
}while(n = n.nextSibling);
}
return -1;// Shouldn't happen.
}
var order = OrderCheck(document.body, document.body.previousSibling);
if(order == 1){
// element 1 first
}else if(order == 2){
// element 2 first
}else{
// there was an error.
}
i nie wystarczy zmienić ten kod, starając się naprawić dwa możliwe problemy, nie testowałem tego nowego zmienił jednak, więc jeśli przerwy coś będę musiał spróbować ponownie . (Edytowany ponownie, aby naprawić błąd stylu "nawet nie działa").
Należy zauważyć, że metoda Resig działa tylko na węzłach elementów, a nie na węzłach tekstowych. – Michael
Tak. Węzły tekstowe nie mają .sourceIndex i nie mają .contains(). – Michael
&& nie robi nic we wszystkich tych przypadkach, ponieważ RHS jest zawsze prawdziwe. – gsnedders