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".