jquery .removeClass()if NOT .next()

时间:2012-03-14 11:50:45

标签: jquery

如何从除下一个元素之外的所有元素中删除该类?

例如:

<ul>
  <li class="current"><a href="#">Trigger</a></li>
  <li class="next"><a href="#">Trigger</a></li>
  <li class="next"><a href="#">Trigger</a></li>
  <li class="next"><a href="#">Trigger</a></li>
</ul>

点击触发链接a会移除"next"元素中的所有li类,但正好在下面的

我并不担心实现这一目的的整套代码。除了下一个li之外,我已经写了除了下一个除了下一个课程之外的所有东西吗?

更新:已解决

似乎我忽略了一个效果很好的简单解决方案:

$(this).parent().siblings().not().next().removeClass('next');

5 个答案:

答案 0 :(得分:2)

使用.nextAll方法获取当前元素之后的所有连续兄弟。然后,使用.slice(1)减少集合。

$('li a').click(function() {
    $(this).parent().nextAll().slice(1).removeClass('next');
});

之前的方法仅从后续项中删除next。如果您想影响所有兄弟姐妹,可以使用以下内容:

$('li a').click(function() {
    var $parent = $(this).parent();
    $parent.siblings().not($parent.next()).removeClass('next');
});

另一个选择:从所有元素中删除next类,然后将其添加到下一个元素。

答案 1 :(得分:0)

刚才意识到这很简单!

$(this).parent().siblings().not().next().removeClass('next');

答案 2 :(得分:0)

这样的事情:

$('a').click(function() {
    $(this).parent().nextAll('.next').not($(this).next()).removeClass('next');

});

答案 3 :(得分:0)

你可以试试这个:

var $ul = $('ul').on('click', 'a', function () {

    // get the next element
    var n = $(this).next('a');

    // get everything else except this
    $ul.find('a').not(this).removeClass('next');

});

答案 4 :(得分:0)

您可以获取下一个li元素的nextAll,并且您的li是链接的父级

$("a").click( function() {
   $(this).parent().next().nextAll().removeClass();  
});​

http://jsfiddle.net/L7KaS/