Ziemlich schwierig, ich persönlich würde jeden Baum itterate, bis ich eine gemeinsame ansester gefunden, dann prüfen Sie, welche übergeordneten Knoten (oder die aktuellen Knoten, wenn dieser niedrig) kommt beginnend zuerst mit first und durch Geschwister arbeiten, so etwas wie:
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.
}
ich habe nur diesen Code bearbeiten in einem Versuch, zwei mögliche Probleme zu beheben, ich habe nicht diese neue bearbeiten jedoch getestet, so dass, wenn etwas kaputt geht werde ich wieder versuchen müssen . (Erneut bearbeitet, um einen "does not even run" Stil-Bug zu beheben).
Es sollte beachtet werden, dass die Methode von Resig nur auf Elementknoten funktioniert, nicht auf Textknoten. – Michael
Ja. Textknoten haben keinen .sourceIndex und sie haben .contains() nicht. – Michael
&& tut nichts in all diesen Fällen, weil die RHS immer wahr ist. – gsnedders