Петля через дочерние объекты объекта до тех пор, пока не будет найден якорь с атрибутом X

Скажем, у меня есть элемент DOM.

Как мне сделать это в Javascript, чтобы узнать, есть ли у этого элемента какие-либо дети (или дети детей), который является элементом атрибутом href является '/'? И если да, вернитесь, на каком уровне (глубине) это?

Пока у меня это:

var children = element.children
var level = 1;
 for (var i=0; i < children.length; i++) {
 if (children[i].nodeName == 'A' && children[i].href == '/') {
 return true;
 }
 }

Как я могу пойти к детям детей?

2 ответа

Как насчет:

function getLevelOfAnchorWithAttrX (element, attr) {
 var anchor = element.querySelector('a[href="' + attr + '"]');
 if (anchor) {
 var level = 1;
 var levelElement = anchor
 while (levelElement.parentElement !== element) {
 level++;
 levelElement = levelElement.parentElement;
 }
 return level;
 }
}

Смотрите сюда.


С рекурсивной функцией:

function traverseChildren(el, depth) {
 depth = depth || -1;
 for (var i=0; i < el.children.length; i++) {
 if (children[i].nodeName == 'A' && children[i].href == '/') {
 return ++depth;
 }
 else if (el.children.length > 0) {
 depth = traverseChildren(el, ++depth);
 }
 }
 return depth;
}

var depth = traverseChildren(element, depth);
if (depth != -1) {
 console.log('a element found at ' + depth + ' levels deep');
}
else {
 console.log('no a element found');
}

licensed under cc by-sa 3.0 with attribution.