javascript - 使用 jQuery 循环遍历元素的最简洁方法?

标签 javascript jquery

给定下面的 HTML,在按下一个按钮时切换类 activehidden 的同时遍历所有元素的最简洁的方法是什么?

<ul>
  <li class="active">        
    First Element <a href="#" class="next">NEXT</a>
  </li>
  <li class="hidden">        
    Second Element <a href="#" class="next">NEXT</a>
  </li>
  <li class="hidden">        
    Third Element <a href="#" class="next">NEXT</a>
  </li>
</ul>

您可以假设 hidden 类隐藏了元素。

这是我能想到的最简洁的方式:

$('.next').click(function() {
   var $li = $(this).parent().toggleClass('active hidden'),
   $nextLi = $li.is(':last-child') ? $li.siblings(':first') : $li.next();
   $nextLi.toggleClass('active hidden');
});

最佳答案

可能比简洁更像高尔夫,但仍然

var elems = $('li').on('click', function(e) {
    if ( $(e.target).is('.next') ) 
        $([this.nextElementSibling||elems.first(), this]).toggleClass('active hidden');
});

FIDDLE

$('.next').on('click', function(e) {
    $('.active+li, li:first').last().add('.active').toggleClass('active hidden');
});

FIDDLE

为了一致性和可读性,我会这样做

$('.next').on('click', function(e) {
    var li   = $(this).closest('li'),    // this LI
        lis  = li.siblings().addBack(),  // all LI's
        act  = lis.filter('.active'),    // active LI
        next = act.next();               // next LI

    if ( next.length === 0 ) next = lis.first(); // if no next, get first

    li.add( next ).toggleClass('active hidden');
});

FIDDLE

关于javascript - 使用 jQuery 循环遍历元素的最简洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956818/

相关文章:

javascript - 如何导出从异步函数获取值的变量

javascript - 在离线页面中使用 javascript

javascript - jquery 从函数打开 anchor 链接

Javascript 不会更新用 PHP 编写的变量

javascript - jQuery 下一个选择行上的元素

javascript - jquery 中的 radio 输入验证

javascript - jquery.tap 在没有事件的情况下运行函数

javascript - 在React中使用Fetch从服务器获取数据

jquery - 将匿名对象发布到 MVC 操作

javascript - 使用easyResponsiveTabs.js时如何解决固定菜单闪烁的问题?