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

我想循環雖然div.cat_ch如何?通過兒童div的jQuery循環

這一次失敗:

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

看起來像一個列表。因此,應該是UL/LI,而不是DIV/DIV。另外,如果在父級上設置「overflow:auto」,則可以避免「清除」DIV。 – 2012-07-23 19:57:32

+0

$('。cat_ch')。每個(函數(){}); – jeschafe 2012-07-23 19:57:52

+0

我很確定'name'不是'div'元素的有效屬性。 – 2012-07-23 20:02:09

回答

3

http://jsfiddle.net/2TRxh/

我覺得你的問題出在試圖讓VAL落DIV你得到的屬性$(this).attr("name").val()後。在div上使用.val()沒有任何意義。如果你刪除$(this).attr("name")返回name屬性脫離divs。您可以通過在每個div中使用類選擇器來指定div進行循環遍歷,而不僅僅是div。 $(".cat_ch").each(function() {});這已被顯示在對這個問題的各種其他答案中。

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

如果通過div.cat_ch要循環,你應該使用的jQuery選擇:

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

您還可以通過子元素循環通過使用jQuery children()方法:

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

的第三種方式通過所需的元素循環是像這樣:

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

使用哪種方式,沒有最好的方法。

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

}); 

或者

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

}); 

JQuery的.children方法和CSS3子選擇>將只返回選擇,.cat_ch類的實例相匹配的直接孩子。

如果你想在DOM樹搜索更深,即,包括嵌套元素,使用.find或省略子選擇:

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

或者

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

如果您只想瞄準裏面的Divs,試試

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

其他答案需要特定的類和/或將處理父div內的非div。

+0

被警告!這也會打到你的「清除」div,你可以通過做$('#ChosenCategory div:not(.clear)')來避免這種情況 – tigertrussell 2012-07-23 20:00:56

+0

是的,爲什麼你不改變選擇器爲'$('#ChosenCategory div.cat_ch')'? – Stano 2012-07-23 20:05:21

+0

儘管OP確實在那裏有這些類,但這個問題真的被稱爲「循環通過子div」,所以我想給出一個答案,以反映如何循環通過子div,而不管它們的名字。頁面佈局在應用程序的開發中經常發生變化,有時不必爲了匹配不同的選擇器而重寫JavaScript。 – tigertrussell 2012-07-24 12:29:56

5
$(function(){ 

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

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

}); 

工作樣本: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!!