父/兄弟/子上的jQuery removeClass

时间:2010-10-19 21:29:11

标签: jquery

我使用以下jQuery来更改无序列表中元素的类。它似乎不是实现这种效果的最有效方式。有没有更好的方法来写这个?

$(function() {
    $('nav li a').click( function() {
        $(this).parent().siblings().children().removeClass('active');
        $(this).addClass('active');
    });
});

由于

取值

3 个答案:

答案 0 :(得分:47)

在这些情况下,将处理程序附加到<li>并从<a>点击bubble up(默认情况下会发生),通常会更简单。然后您的处理程序如下所示:

$(function() {
  $('nav li').click( function() {
    $(this).addClass('active').siblings().removeClass('active');
  });
});

然后在您的CSS中,您只需考虑active上的<li>,就像这样:

li.active a { color: red; }

顺便说一句,如果你有很多<li>个元素,你会想要.delegate()这样使用:

$('nav').delegate('li', 'click', function() {
  $(this).addClass('active').siblings().removeClass('active');
});

答案 1 :(得分:5)

另请注意,如果您要从除'active'之外的所有元素中删除this,那么您可以轻而易举地使用

这样的内容
$('.active').removeClass('active');
$(this).addClass('active');

这应该很容易在树上传播。但是,如果DOM人口密集,我可以看到它导致性能问题。

答案 2 :(得分:1)

我使用上面的代码,它正在工作

我在我的代码中使用

enter code here : function addnewStepsUpper(){
jQuery('.hide_upper_clone_class').clone().insertAfter(".upper_clone_class1");
jQuery('.upper_clone_class1').siblings().removeClass('hide_upper_clone_class');

}

由于 Vishal Sanwar