Как рекурсивно искать все parentNodes
Я хочу знать, как найти рекурсивно все родительские узлы элемента.
Предположим, что у меня есть следующий фрагмент
<a href="#"><font>Hello</font></a>
В этом я хотел бы узнать, является ли тег parent parent node тегом привязки или нет.
Теперь это может быть достигнуто просто проверкой свойства .parentNode. Но что, если есть следующие случаи, такие как
<a href="#"><font><b>Hello<b></font></a>
или
<a href="#"><font><b><u>Hello</u><b></font></a>
Итак, в основном, как узнать, достиг ли мы самого верхнего родителя node?
Ответы
Ответ 1
Вы можете перемещаться от элемента до корня, ища желаемый тег:
function findUpTag(el, tag) {
while (el.parentNode) {
el = el.parentNode;
if (el.tagName === tag)
return el;
}
return null;
}
Вы вызываете этот метод с помощью элемента start:
var el = document.getElementById("..."); // start element
var a = findUpTag(el, "A"); // search <a ...>
if (a) console.log(a.id);
Ответ 2
Следующая рекурсивная функция вернет возрастающий упорядоченный массив, со всеми родительскими узлами для предоставленного элемента DOM, , пока не будет достигнут BODY node.
function parents(element, _array) {
if(_array === undefined) _array = []; // initial call
else _array.push(element); // add current element
// do recursion until BODY is reached
if(element.tagName !== 'BODY' ) return parents(element.parentNode, _array);
else return _array;
}
Использование:
var parentsArray = parents( document.getElementById("myDiv") );
Ответ 3
Я работал над подобным. Попытка закрыть div, если пользователь щелкает за пределами div. Он должен пересекать все его родительские узлы.
взгляните на это:
http://jsfiddle.net/aamir/y7mEY/
Ответ 4
Вы можете использовать метод jQuery closeest() для получения ближайшего ahref:
$("#your-element").closest("a").css("color", "red");
Или вы можете взглянуть на метод parentsUntil:
$("#your-element").parentsUntil("#yourWrapper", "a").first().css("color", "red");
Попробуйте здесь: http://www.lunarailways.com/demos/parents.html