La propriété nextSibling
des DOM noeuds fonctionne parfaitement dans tous les navigateurs et fait exactement ce que vous attendez. S'il n'y a pas de frère suivant, il renvoie null
.
L'itération sur un NodeList
(qui correspond à getElementsByTagName
) est identique à l'itération sur un ensemble à l'aide d'une boucle for
standard. Ce qui suit itérer sur les liens et alerter chaque fois qu'il en trouve un qui est un frère suivant <div>
:
var menu = document.getElementById('menu');
var links = menu.getElementsByTagName('a');
// Iterate over the links
for (var i = 0, len = links.length, link; i < len; ++i) {
link = links[i];
if (link.nextSibling && link.nextSibling.nodeName == "DIV") {
alert("Next sibling is DIV! " + link.innerHTML);
}
}
Notez que dans les navigateurs non-IE, les espaces entre les éléments en HTML est considéré comme un nœud de texte. Vous voudrez peut-être ignorer ces nœuds d'espaces blancs en considérant le prochain frère de chaque lien. Ce qui suit faire:
function isWhitespace(node) {
return node.nodeType == 3 && /^\s*$/.test(node.data);
}
// Iterate over the links
for (var i = 0, len = links.length, link, next; i < len; ++i) {
link = links[i];
next = link.nextSibling;
if (next && isWhitespace(next)) {
next = next.nextSibling;
}
if (next && next.nodeName == "DIV") {
alert("Next sibling is DIV! " + link.innerHTML);
}
}
Vous feriez mieux d'utiliser une bibliothèque JavaScrip, jQuery par exemple – infinity
je ne peux pas dans cette situation, généralement je le ferais. Cela montre juste ma dépendance sur ces bibliothèques ... – JasonS
Le prochain frère de quoi? –