Propriété previousSibling du XML DOM
Définition et utilisation
previousSibling
Cette propriété renvoie le noeud frère précédent de l'élément sélectionné (le noeud précédent au même niveau dans l'arbre).
Si aucun tel noeud n'existe, cette propriété renvoie null.
Syntaxe
elementNode.previousSibling
Remarque :Firefox et la plupart des autres navigateurs considèrent les espaces ou les sauts de ligne comme des noeuds texte, tandis que Internet Explorer ne le fait pas. Par conséquent, dans l'exemple suivant, nous utilisons une fonction pour vérifier le type de noeud du noeud frère précédent.
Le nodeType de l'élément est 1, donc si le noeud frère précédent n'est pas un noeud élément, il se déplace au noeud précédent et vérifie si ce noeud est un noeud élément. Cela continuera jusqu'à ce que le noeud frère précédent (doit être un noeud élément) soit trouvé. De cette manière, le résultat est correct dans tous les navigateurs.
Astuce:Pour plus d'informations sur les différences entre les navigateurs, veuillez consulter la section DOM navigateur du tutoriel XML DOM.
Exemple
Exemple 1
Le code suivant charge "books.xml" dans xmlDoc et récupère le noeud précédent de même niveau du premier élément <author> :
var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myFunction(this); } }; xhttp.open("GET", "books.xml", true); xhttp.send(); // Vérification du node précédent de même niveau s'il s'agit d'un noeud élémentaire function get_previoussibling(n) { var x = n.previousSibling; while (x.nodeType != 1) { x = x.previousSibling; } return x; } function myFunction(xml) { var xmlDoc = xml.responseXML; var x = xmlDoc.getElementsByTagName("author")[0]; var y = get_previoussibling(x); document.getElementById("demo").innerHTML = x.nodeName + " = " + x.childNodes[0].nodeValue + "<br>Frère suivant: " + y.nodeName + " = " + y.childNodes[0].nodeValue; }
Exemple 2
Utilisation de nextSibling pour obtenir le noeud suivant de même niveau :
var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myFunction(this); } }; xhttp.open("GET", "books.xml", true); xhttp.send(); // Vérification du node suivant de même niveau s'il s'agit d'un noeud élémentaire function get_nextsibling(n) { var x = n.nextSibling; while (x.nodeType != 1) { x = x.nextSibling; } return x; } function myFunction(xml) { var xmlDoc = xml.responseXML; var x = xmlDoc.getElementsByTagName("title")[0]; var y = get_nextsibling(x); document.getElementById("demo").innerHTML = x.nodeName + " = " + x.childNodes[0].nodeValue + "<br>Frère suivant: " + y.nodeName + " = " + y.childNodes[0].nodeValue; }