我有一些html / jQuery用于实现一些标签式导航。当选择一个新选项卡时,我需要使它的css类为“active”,并将之前的tabs css类更改为“inactive”。为此,我在click
事件中使用了以下代码:
$("ul.tabs li").removeClass("active"); //Remove any "active" class
$("ul.tabs li").addClass("inactive"); //Set all to "inactive"
$(this).removeClass("inactive"); //remove "inactive" from the item that was clicked
$(this).addClass("active"); //Add "active" class to the item that was clicked.
这有效,但我很好奇是否有人找到了更干净/更优雅的方法呢?
答案 0 :(得分:3)
$("ul.tabs li").click(function(){
$(".active").removeClass("active").addClass("inactive");
$(this).removeClass("inactive").addClass("active");
});
答案 1 :(得分:2)
为什么不将inactive
样式作为默认样式?然后,你可以这样做:
$("ul.tabs li").removeClass("active");
$(this).addClass("active");
答案 2 :(得分:2)
$(this).removeClass("inactive").addClass("active").siblings().removeClass("active").addClass("inactive");
请注意,最好不要在元素的$('ul.tabs li')
事件中使用click
,因此,如果您有许多.tabs
,则只会点击被点击元素的那个。< / p>
但是,最好编写CSS,这样你就不必使用inactive
类,如下所示:
ul.tabs li {…} /* Inactive state */
ul.tabs li.active {…} /* Active state */
答案 3 :(得分:1)
为什么不简单地找到该类的元素然后将其删除?您可以将其简化为两行:
$('.active').removeClass('active').addClass('inactive');
$(this).addClass('active').removeClass('inactive');
答案 4 :(得分:0)
这至少只会评估一次选择器。
$("ul.tabs li").removeClass("active").addClass("inactive");
$(this).removeClass("inactive").addClass("active");
我同意其他建议,最好摆脱不活跃的课程。使选项卡的默认格式为“非活动”。然后,根据需要添加/删除活动类。将“活动”类的CSS放在选项卡的默认CSS之后,它将取代默认状态。然后,您的代码可能就是这样:
$("ul.tabs li.active").removeClass("active");
$(this).addClass("active");
答案 5 :(得分:0)
使用:not()
比.not()
更快
而不是添加和删除类使用jQuery toggleClass()
您应该像这样编写代码:
$("ul.tabs li:not(" + $(this) + ")").toggleClass("active", "inactive");
$(this).addClass('active');