el estandar DOM define lo que se llama un walker o traverser, es a manera de una funcion para recorrer por los elementos que utiliza un filtro definido por ti. la verdad nunca me he interesado mucho por el, o sea, lo unico que se es la teoria.
ahora bien, hacen justamente casi dos dias que modifique un codigo que escribi que me parece similar a ese principio. aunque te sea util quizas te sea compleja entenderla, no se...
Código:
var walk = function(filter){
var array = [];
for(var node = this.firstChild; node; node = node.nextSibling){
if(!filter)array.push(node);
else if(filter(node))array.push(node);
if(node.firstChild)array = array.concat(arguments.callee.call(node, filter));
}
return array;
};
sinopsis:
Cita: walk.call(element node [, function filter]);
node, un elemento del documento. desde ese elemento la funcion va a recorrer por sus hijos
filter, una funcion opcinal que recibe como argumento el elemento actual que esta recorriendo. la funcion debe devolver true o false segun el analisis que se haga con este. si devuelve true, el nodo es agregado a la coleccion. si el filtro no se provee, entonces walk devuelve todos los nodos, incluyendo nodos anidados, que son hijos del elemento a recorrer.
un ejemplo de uso:
Código:
var collection = walk.call(document.body, function(elem){
if(/^a$/i.test(elem.nodeName) && /menu/.test(elem.className))return true;
})
en este ejemplo,
walk recorre el elemento <body> en busca de elementos anclas (<a>) con la clase "menu".