2011-03-02 10 views
5

que tienen este árbol DOM:cómo recorrer algún niño específico nodos

<li> 
data .... 
    <br> 
    data ... 
    <img ... /> 
    <br> 
    <script> ... </script> 
    <span> data ... </span> 
</li> 

cómo puedo bucle a través de los hijos del elemento li anterior que se encuentren entre el li en sí y el elemento de la escritura, es decir, la escritura y la duración los elementos están fuera del ciclo ... gracias en advace !!

nota: No quiero usar JQuery, porque mi aplicación usa Protoype y entrará en conflicto con JQuery si los uso juntos, agradecería que hubiera una solución rápida usando Prototype.

Respuesta

8

¿Algo como esto funcionaría para usted?

var child = liElement.firstChild; 
while(child){ 
    if(child.nodeName.toLowerCase() == 'script'){ 
     break 
    } 
    //do your stuff here 
    child = child.nextSibling; 
} 

Nota, si el los "datos" en su ejemplo son cadenas, éstas se existe en la jerarquía niño como instancias de textNodes. si usted tiene que hacer un procesamiento especial en esta materia, usted tendrá que hacer un cheque como

switch(child.nodeType){ 
case 3: 
    //text Node 
    break; 
case 1: 
    //Element node 
    break; 
default: 
    //break; 
} 

la salida https://developer.mozilla.org/en/nodeType para más tipos de nodos

+0

muchas gracias señor jordancpaul .. que exactamente lo que quiero .. – JaHelia

-1

hav eYou echado un vistazo a jQuery? tiene una sintaxis de consulta muy simple. No estoy seguro de en qué elementos exactamente quieres pasar, pero para intance: $ ('li> img') devolverá todas las imágenes debajo de todos los elementos de la lista. echa un vistazo a la especificación para más jquery

+0

no puedo usuario jQuery porque estoy usando Prototype en mi solicitud y que va a entrar en conflicto con jQuery si lo uso. – JaHelia

+0

bien, vi tu edición. para el tipo que hizo el -1, respondí antes de que JeHelia añadiera el hecho de que no podía usar JQuery. – Menahem

2

Se puede usar jQuery selectores:

que todos los niños de <li>:

$('li').children(); 

Excluir elementos no deseados:

$('li').children().not('script').not('span'); 

Entonces bucle sobre la selección :

$('li').children().not('script').not('span').each(function(index, element){ 
    //do sth like hide the element 
    $(element).hide(); 
}); 
+0

BTW: jQuery puede jugar muy bien con otras bibliotecas que también usan '$'. Hay un modo sin conflicto para esto: http://api.jquery.com/jQuery.noConflict/ – gunnarsson

+0

He utilizado este método (noConflict) pero no es el problema, el sitio se cuelga en muchas páginas y no hay un motivo específico por eso, si me quito la librería jQuery ningún accidente ocurre .. – JaHelia

+0

sólo una biblioteca selectores puede fácilmente descargado que le da el poder de los selectores de jQuery y nada más –

1

he aquí una solución Pirateé para usted:

$("li").each(function(index) { 
console.log($(this).find("span:first").text()); 
}); 

first span in Li

Cuestiones relacionadas