2012-07-23 42 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> 

Ich möchte Schleife zwar div.cat_ch Wie?jQuery Schleife durch untergeordnete divs

Dieses versagt:

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

Sieht aus wie eine Liste. Daher sollte UL/LI sein, nicht DIV/DIV. Das "clear" DIV kann auch vermieden werden, wenn Sie "overflow: auto" auf dem übergeordneten Element festlegen. –

+0

$ ('. Cat_ch').jede (Funktion() {}); – jeschafe

+0

Ich bin ziemlich sicher, dass 'name' kein gültiges Attribut eines' div' Elements ist. –

Antwort

3

http://jsfiddle.net/2TRxh/

Ich denke, Ihr Problem mit dem Versuch liegt die val aus dem div zu erhalten, nachdem Sie das Attribut $(this).attr("name").val() erhalten. Die Verwendung von .val() auf einem Div macht keinen Sinn. Wenn Sie das entfernen, gibt $(this).attr("name") die name Eigenschaft aus den divs zurück. Sie können weiter spezifizieren, dass die divs durch zu durchlaufen sind, indem Sie den Klassenselektor in Ihrem jedes anstatt nur div verwenden. $(".cat_ch").each(function() {}); Dies wurde in verschiedenen anderen Antworten auf diese Frage gezeigt.

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

Wenn Sie durch div.cat_ch Schleife möchten, können Sie, dass für die jQuery-Selektor verwenden sollten:

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

Sie können auch eine Schleife durch die untergeordneten Elemente mit dem jQuery children() Methode:

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

Eine dritte Möglichkeit, eine Schleife durch die gewünschten Elemente ist wie folgt:

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

Verwenden je nachdem, wie Sie wollen, gibt es keine beste Weg.

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

}); 

Oder

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

}); 

des JQuery .children Methode und css3 Kindselektor > nur die direkten Kinder zurück, die die Wähler übereinstimmen, Klasse .cat_ch im Beispiel.

Wenn Sie in der DOM-Struktur tiefer gesucht werden soll, das heißt, verschachtelte Elemente enthalten, verwenden .find oder das Kind Selektor auslassen:

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

Oder

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

Wenn Sie nur wollen die Divs innerhalb zielen, versuchen

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

Die anderen Antworten erfordern bestimmte Klassen und/oder werden auch Nicht-Divs innerhalb Ihres Elternteils bearbeiten.

+0

Vorsicht! Dies wird auch Ihr "clear" div treffen, Sie können das vermeiden, indem Sie $ ('# ChosenCategory div: not (.clear)') statt – tigertrussell

+0

Ja, warum ändern Sie dann nicht den Selektor auf '$ ('# ChosenCategory div.cat_ch ') '? – Stano

+0

Obwohl das OP diese Klassen dort hatte, wurde die Frage wirklich als "Schleife durch Kinddivs" formuliert, also wollte ich eine Antwort geben, die widerspiegelte, wie man Kinddivs ungeachtet ihrer Namen durchläuft. Das Seitenlayout ändert sich oft in der Entwicklung einer App, und manchmal ist es schön, dass Sie Ihr Javascript nicht einfach neu schreiben müssen, um verschiedene Selektoren zu finden. – tigertrussell

5
$(function(){ 

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

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

}); 

Arbeits Beispiel: 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!!