根据类名添加增量数据attr值

时间:2014-03-24 13:44:55

标签: jquery

我有一些<li>个类名,如下所示;

<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.

2 个答案:

答案 0 :(得分:2)

<强> DEMO

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

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

使用jQuery元素中的.index( this )方法Array集合将返回该元素的索引位置。索引是&#39; 0&#39; 0基于你只需增加1

答案 1 :(得分: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