El nextSibling
propiedad de los nodos DOM funciona perfectamente en todos los navegadores y hace exactamente lo que se espera. Si no hay un próximo hermano, devuelve null
.
iterar sobre un NodeList
(que es lo getElementsByTagName
devoluciones) es idéntica a iterar sobre una matriz mediante un bucle estándar for
. A continuación se iterar sobre los enlaces y alertar cada vez que encuentre uno cuyo hermano siguiente es un <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);
}
}
Tenga en cuenta que en la no-IE navegadores, los espacios en blanco entre los elementos en HTML se considera un nodo de texto. Es posible que desee ignorar estos nodos de espacio en blanco al considerar cuál es el siguiente hermano de cada enlace. A continuación se hará lo siguiente:
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);
}
}
es mejor utilizar alguna biblioteca JavaScrip, jQuery por ejemplo – infinity
no puedo en esta situación, por lo general lo haría. Esto solo muestra mi dependencia de tales bibliotecas ... – JasonS
¿El próximo hermano de qué? –