javascript - recursividad - Cómo buscar recursivamente todos los nodos primarios
recursividad javascript (4)
Quiero saber cómo encontrar recursivamente todos los nodos principales de un elemento. Supongamos que tengo un fragmento siguiente
<a href="#"><font>Hello</font></a>
En esto me gustaría saber si el nodo primario de la etiqueta de fuente es una etiqueta de anclaje o no. Ahora esto se puede lograr simplemente marcando la propiedad .parentNode. Pero ¿y si hay siguientes casos como,
<a href="#"><font><b>Hello<b></font></a>
o
<a href="#"><font><b><u>Hello</u><b></font></a>
Entonces, básicamente, ¿cómo saber si hemos llegado al nodo superior más superior?
He estado trabajando en algo similar. Intentando cerrar un div si el usuario hace clic fuera del div. Necesita recorrer todos sus nodos primarios.
Eche un vistazo a esto: http://jsfiddle.net/aamir/y7mEY/
La siguiente función recursiva devolverá una matriz ordenada ascendente , con todos los nodos principales para el elemento DOM proporcionado, hasta que se alcance el nodo BODY .
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;
}
Uso
var parentsArray = parents( document.getElementById("myDiv") );
Puede atravesar desde un elemento hasta la raíz buscando la etiqueta deseada:
function findUpTag(el, tag) {
while (el.parentNode) {
el = el.parentNode;
if (el.tagName === tag)
return el;
}
return null;
}
Usted llama a este método con su elemento de inicio:
var el = document.getElementById("..."); // start element
var a = findUpTag(el, "A"); // search <a ...>
if (a) console.log(a.id);
Puedes usar el método más cercano jQuery () para obtener el ahref más cercano:
$("#your-element").closest("a").css("color", "red");
O puedes echar un vistazo al método parentsUntil :
$("#your-element").parentsUntil("#yourWrapper", "a").first().css("color", "red");
Pruébelo aquí: http://www.lunarailways.com/demos/parents.html