2011-09-28 46 views
3
<div id="container"> 
    <div class="aa"></div> 
    <div class="bb"></div> 
    <div class="aa"></div> 
    <div class="bb"></div> 
    <div class="bb"></div> 
    <div class="bb"></div> 
    <div class="bb"></div> 
</div> 

我只需要在循環時根據特定的類找到元素的索引。如何根據兄弟姐妹之間的排序元素找到索引。

正常指數會給出同胞中的元素索引no: 我想只考慮同類的兄弟姐妹,並根據排序後的兄弟姐妹給出索引。

$("#container div").each(function(){ 

    if($(this).hasClass('bb')){ 
     var index = $(this).index(); 
      //will give me 1,3,4,5 etc 

     //I want 0,1,2 etc ie: list the index based on class 

     } 
    if($(this).hasClass('aa')){ 
      var index = $(this).index(); 

      //will give me 0 , 2 
     //I want 0,1 etc ie: list the index based on class 
     } 

}) 

回答

1

對於.index()可以傳遞一個選擇器作爲一個參數(例如'.bb')。

正如你可以在online documentation找到。

如果選擇字符串被作爲參數傳遞,的.index()返回一個 整數,表示原始的元素相對於的位置 由選擇匹配的元素。如果找不到元素, .index()將返回-1。

所以,你可以這樣做:

$("#container div").each(function(i){ 

    if($(this).hasClass('bb')){ 
     var index = $(this).index('.bb'); 
    } 
    else if($(this).hasClass('aa')){ 
     var index = $(this).index('.aa'); 
    } 

}); 

jsFiddle Demo

+0

感謝它的簡單作品.... – Sarath

1

如果你傳遞一個元素的index()方法,它將返回匹配的元素,而不是中該元素的索引其兄弟姐妹。

所以,你都可以用同一類的元素匹配其作爲當前和調用index()產生的jQuery對象,路過當前元素作爲參數:

$("#container div").each(function() { 
    var index = $("#container div." + $(this).attr("class")).index(this); 
    // ... 
} 
+0

感謝您的回答... – Sarath

1

割裂開來:

var $as = $('container > .aa'), 
    $bs = $('container > .bb'); 

for (...) { 
    if ($this.hasClass('aa')) console.log($as.index($this)); 
    if ($this.hasClass('bb')) console.log($bs.index($this)); 
} 
+0

這也是一個很酷的方法..謝謝... – Sarath