Reputation: 3688
I have some <li>
s with class names as follows;
<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>
I need a jQuery function to add values to each an every <li>
element's data-order. Value has to be set as follows.
<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>
data-order will start from one. When multiple <li>
having the same class, the data-order will start incrementing by 1.
Upvotes: 1
Views: 450
Reputation: 3281
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);
}
});
}
Upvotes: 1
Reputation: 206347
var $ord = $('[data-order]');
$ord.each(function(){
var $ordSib = $('.'+ this.className );
return $(this).data('order', $ordSib.index(this)+1 );
});
Using .index( this )
method from a jQuery elements Array collection will return the index position of that element. For index is '0' based you just need to increment than by 1
Upvotes: 2