На JavaScript следующий одноуровневый элемент?
может ли кто-нибудь показать мне, как перебирать якорные теги в div и найти следующего брата?
у меня это до сих пор.
var menu = document.getElementById('menu');
var links = menu.getElementsByTagName('a');
Как сделать петлю через ссылки? Могу ли я использовать .nextSibling
чтобы узнать, является ли следующий брат div?
2 ответов
на nextSibling
свойства узлов DOM отлично работает во всех браузерах и делает именно то, что вы ожидаете. Если нет следующего брата, он возвращается null
.
повторение над NodeList
(что и есть getElementsByTagName
returns) идентичен итерации по массиву с использованием стандартного for
петли. Следующее будет повторяться по ссылкам и предупреждать каждый раз, когда он находит того, чей следующий брат является <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);
}
}
обратите внимание, что в браузерах, отличных от IE, пробелы между элементы в HTML считаются текстовым узлом. Возможно, вы захотите игнорировать эти узлы пробелов при рассмотрении следующего брата каждой ссылки. Это будет сделано следующим образом:
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);
}
}
for(var i=0; i<links.length; i++) {
if (links[i].nextChild.nodeName=="DIV")
alert("This is a DIV")
}