2014-03-24 65 views
1

我有一些<li> s,其類名如下;根據類名稱添加增量數據attr值

<li class="2014" data-order=""></li> 
<li class="2014" data-order=""></li> 
<li class="2013" data-order=""></li> 
<li class="2013" data-order=""></li> 
<li class="2013" data-order=""></li> 
<li class="2012" data-order=""></li> 

我需要一個jQuery函數值添加到每一個每一個<li>元素的數據順序。值必須設置如下。

<li class="2014" data-order="1"></li> 
<li class="2014" data-order="2"></li> 
<li class="2013" data-order="1"></li> 
<li class="2013" data-order="2"></li> 
<li class="2013" data-order="3"></li> 
<li class="2012" data-order="1"></li> 
<li class="2011" data-order="1"></li> 

數據順序將從一開始。當具有相同類中的多個<li>,數據順序將開始通過1

+0

AFAIK :)你不能有*號*的類名就好像走在高速公路上,你可以做到這一點,但.. –

+0

我只是使用數字進行清晰的演示。它可以是任何東西,我的意思是數字+字符串 – Body

回答

2

遞增DEMO

var $ord = $('[data-order]'); 

$ord.each(function(){ 
    var $ordSib = $('.'+ this.className); 
    return $(this).data('order', $ordSib.index(this)+1); 
}); 

從一個jQuery元件陣列集合上使用.index(this)方法將返回該元素的索引位置。對於指數爲「0」根據你只需要增加比1

+1

好吧,你贏了! –

+0

非常感謝Roko。不僅得到了答案,而且還了解了這個和這個$的區別。 – Body

+0

@Body是的,'this'是JS引用,而'$(this)'只是jQuery將JS的'this'傳遞給Object。 –

1
var arrayOfClasses=[]; 

$('li').each(function(){ 
    var elementsClass=$(this).attr('class'); 
    if($.inArray(elementsClass,arrayOfClasses)==-1){ 
     arrayOfClasses.push(elementsClass); 
    } 
}); 

for(var i in arrayOfClasses){ 
    var className=arrayOfClasses[i]; 
    var count=0; 
    $('li').each(function(){ 
     if($(this).hasClass(className)){ 
      count=count+1; 
      $(this).attr('data-order',count); 
     } 
    }); 
} 

JSBIN