如何反向遍历列表?

时间:2014-06-05 06:49:36

标签: jquery

我今天看到了this question并且好奇地制作了我自己的概念(或者可能是该问题的OP概念),但是在这里我怎么能在活动类之后迭代列表并从头开始。让我从以下html中了解到:

<ul>
  <li name="6">one</li>
  <li name="1" class="active">two</li>
  <li name="2">three</li>
  <li name="3">four</li>
  <li name="4">five</li>
  <li name="5">six</li>
</ul>

现在,如果活动类位于倒数第二个li中,那么看起来像这样:

<ul>
  <li name="3">one</li>
  <li name="4">two</li>
  <li name="5">three</li>
  <li name="6">four</li>
  <li name="1" class="active">five</li>
  <li name="2">six</li>
</ul>

对于更长的列表,这将是这样的:

<ul>
  <li name="3">one</li>
  <li name="4">two</li>
  <li name="5">three</li>
  <li name="6">four</li>
  <li name="1" class="active">five</li>
  <li name="2">six</li>
  <li name="3">seven</li>
  <li name="4">eight</li>
  <li name="5">nine</li>
  <li name="6">ten</li>
  <li name="1">eleven</li>
  <li name="2">tweleve</li>
</ul>

我的意思是我想这样做:

  • 从活动课程开始,它应该从1开始,然后增加为1 同级
  • 从有效课程开始,它应该从1开始,减少为1 以前的兄弟姐妹(意思是6,5,4 ......)

我所做的是:

$('li').attr('name',function(i){
  i += 5
    return i % 6 + 1;
});

但如果活动类位于第二个列表中,它只会很好。那么,如果我不知道活跃的课程在哪里,我该怎么办?

2 个答案:

答案 0 :(得分:2)

这是一个很好的方法......;)

var stopvalue = 6;
var activeindex = $('li.active').index() % stopvalue ;
$('ul>li').attr('name', function (i) {
    return (i + (stopvalue - activeindex)) % stopvalue  + 1;
});

demo

答案 1 :(得分:0)

使用 Demo Fiddle 检查此 .nextAll()  和 .prevAll()

var activeVal = $( "li.active" ).attr('name');

$( "li.active" ).nextAll().each(function(i){
        $(this).attr('name',function(){
        return i + parseInt(activeVal) + 1;
    });    
}).end().prevAll().each(function(i){
    $(this).attr('name',function(){
        return i +parseInt(activeVal)+1;
    });    
});

<强>注释:

  • First Loop - .nextAll()。迭代表格直到最后一个元素。
  • 第二圈 - .prevAll()。从前一个到第一个迭代。

要检查迭代,请在控制台中验证:

$('li').each(function(){
   console.log($(this).attr('name')); 
});