plutôt difficile, personnellement, j'itterate jusqu'à chaque arbre jusqu'à ce que je trouve un ansester commun, puis vérifier quel nœud parent (ou le nœud réel si ce faible) apparaît en premier en commençant par firstChild et de travailler à travers les frères et sœurs, quelque chose comme:
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.
}
Je ne vient modifier ce code pour tenter de résoudre deux problèmes possibles, je ne l'ai pas testé cette nouvelle édition cependant, si quelque chose se brise, je vais devoir essayer de nouveau . (Edité à nouveau pour corriger un bug de style "ne fonctionne même pas").
Il convient de noter que la méthode Resig ne fonctionne que sur les nœuds d'éléments, pas sur les nœuds de texte. – Michael
Ouais. Les nœuds de texte n'ont pas .sourceIndex et ils n'ont pas de .contains(). & – Michael
&& ne fait rien dans tous ces cas, parce que le RHS est toujours vrai. – gsnedders