2012-07-23 19 views
7
<div id="ChosenCategory" class="chosen"> 
    <div class="cat_ch" name="1"> 
    <div class="cat_ch" name="2"> 
    <div class="cat_ch" name="3"> 
    <div class="cat_ch" name="5"> 
    <div class="clear"> </div> 
</div> 

Quiero repetir aunque div.cat_ch ¿Cómo?jQuery loop a través de Child divs

Ésta falla:

$("div").each(function() { 
     alert("FW"); 
     alert($(this).attr("name").val()); 
    }); 
+1

Parece que una lista. Por lo tanto, debe ser UL/LI, no DIV/DIV. Además, el DIV "claro" se puede evitar si establece 'overflow: auto' en el elemento primario. –

+0

$ ('. Cat_ch').cada uno (función() {}); – jeschafe

+0

Estoy bastante seguro de que 'name' no es un atributo válido de un elemento' div'. –

Respuesta

3

http://jsfiddle.net/2TRxh/

creo que el problema radica en el intento de conseguir el val de la div después de obtener el atributo $(this).attr("name").val(). Usar .val() en un div no tiene sentido. Si elimina ese $(this).attr("name") devuelve la propiedad name de los divs. Puedes especificar más los div's para recorrer usando el selector de clase en cada uno de ellos en lugar de solo div. $(".cat_ch").each(function() {}); Esto se ha demostrado en varias otras respuestas a esta pregunta.

1
$(".cat_ch").each(function() { 
     alert("FW"); 
     alert($(this).attr("name").val()); 
    }); 
1

Si desea recorrer div.cat_ch, debería usarla para el selector de jQuery:

$("div.cat_ch").each(function() { 
    alert("FW"); 
    alert($(this).attr("name").val()); 
}); 

También puede recorrer los elementos secundarios mediante el método jQuery children():

$("#ChosenCategory").children().each(function() { 
    alert("FW"); 
    alert($(this).attr("name").val()); 
}); 

Una tercera forma de bucle a través de los elementos deseados es así:

$("#ChosenCategory > div").each(function() { 
    alert("FW"); 
    alert($(this).attr("name").val()); 
}); 

uso de cualquier manera que desee, no hay una mejor manera.

12
$('#ChosenCategory').children('.cat_ch').each(function() { 

}); 

O

$('#ChosenCategory > .cat_ch').each(function() { 

}); 

de jQuery .children método y el niño CSS3 selector de > devolverá sólo los hijos directos que coinciden con el selector, clase .cat_ch en el ejemplo.

Si desea buscar más profundamente en el árbol DOM, es decir, incluir elementos anidados, utilice .find u omitir el selector de hijo:

$('#ChosenCategory').find('.cat_ch').each(function(){}) 

O

$('#ChosenCategory .cat_ch').each(function(){}) 
1
$('.cat_ch').each(function(i, e) { 
    alert('FW'); 
    alert(e.attr('name').val()); 
}); 
4

Si solo quiere apuntar a las Divs adentro, intente

$('#ChosenCategory div').each(function() {...}); 

Las otras respuestas requieren clases específicas y/o también procesarán divs dentro de su div principal.

+0

¡Ten cuidado! Esto también afectará tu div "clara", puedes evitar eso haciendo $ ('# ElegibleCategory div: not (.clear)') en su lugar – tigertrussell

+0

Sí, ¿por qué no cambias el selector a '$ ('# ElegidoCategoría? div.cat_ch ') '? – Stano

+0

Aunque el OP tenía esas clases allí, la pregunta se formuló realmente como "bucle a través de divisiones secundarias para niños", por lo que quise dar una respuesta que reflejara cómo recorrer las divisiones secundarias independientemente de sus nombres. El diseño de la página a menudo cambia en el desarrollo de una aplicación, y a veces es bueno no tener que reescribir su javascript solo para que coincida con diferentes selectores. – tigertrussell

5
$(function(){ 

    var items=$(".cat_ch") 
    $.each(items,function (index,item) { 

     alert($(item).attr("name")); 
    }); 

}); 

muestra de trabajo: http://jsfiddle.net/GzKHA/

2
 
    function loopOver(obj) 
    { 
     var chl=obj.firstChild; 
     while(chl) 
     { 
      if(chl.nodeType==1) 
      { 
       var isAttr=chl.getAttribute('name'); 
       if(isAttr) 
       { 
        alert(isAttr); 
       } 
      } 
      chl=chl.nextSibling; 
     } 
    } 

    //This is by far the fastest in terms of execution speed!!! 
    var obj=document.getElementById("ChosenCategory"); 
    loopOver(obj); 
Make sure to enclose the each `<div>` tag at the end of each!!