2010-10-19 71 views
14

我正在使用以下jQuery来更改无序列表中元素的类。它似乎并不是达到效果的最有效方式。有没有更好的方法来写这个?在父/兄弟/孩子上的jQuery removeClass

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

感谢

小号

回答

38

它通常是在这些情况下,简单的处理程序连接到<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'); 
}); 
+0

完美!谢谢 - 代表正是我所期待的。 – simonyoung 2010-10-19 21:39:20

5

还要注意的是,如果你想删除'active'回回M非常this所有元素,那么你可以逃脱作为

$('.active').removeClass('active'); 
$(this).addClass('active'); 

这样简单的事情,这应该通过树很容易地传播。不过,如果DOM数量众多,我可以看到它在性能上令人头痛。

0

我上面的代码中使用,它是工作

我用我的代码

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'); 

}

感谢 维沙尔Sanwar

相关问题