Answers:
如果您的元素A
从一开始就公开类,则可以编写:
$(element).toggleClass("A B");
这将删除class A
并添加class B
。如果再次执行此操作,它将删除class B
并恢复class A
。
如果要匹配公开任何一个类的元素,则可以使用多个 类选择器并编写:
$(".A, .B").toggleClass("A B");
var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
这里是一个简化的版本:(虽然不是优雅,但易于后续)
$("#yourButton").toggle(function()
{
$('#target').removeClass("a").addClass("b"); //Adds 'a', removes 'b'
}, function() {
$('#target').removeClass("b").addClass("a"); //Adds 'b', removes 'a'
});
或者,类似的解决方案:
$('#yourbutton').click(function()
{
$('#target').toggleClass('a b'); //Adds 'a', removes 'b' and vice versa
});
toggle
jquery 2.0中
我已经制作了一个用于DRY的jQuery插件:
$.fn.toggle2classes = function(class1, class2){
if( !class1 || !class2 )
return this;
return this.each(function(){
var $elm = $(this);
if( $elm.hasClass(class1) || $elm.hasClass(class2) )
$elm.toggleClass(class1 +' '+ class2);
else
$elm.addClass(class1);
});
};
您可以在这里尝试,复制并在控制台中运行,然后尝试:
$('body').toggle2classes('a', 'b');
您的onClick
要求:
<span class="A" onclick="var state = this.className.indexOf('A') > -1; $(this).toggleClass('A', !state).toggleClass('B', state);">Click Me</span>
试试看:https : //jsfiddle.net/v15q6b5y/
只是JSàjQuery:
$('.selector').toggleClass('A', !state).toggleClass('B', state);
这是另一种“非常规”方式。
这种情况的一个示例可能是具有要在另一个元素(例如容器中的选项卡)上切换的类的按钮。
// 1: define the array of switching classes:
var types = ['web','email'];
// 2: get the active class:
var type = $(mybutton).prop('class');
// 3: switch the class with the other on (say..) the container. You can guess the other by using _.without() on the array:
$mycontainer.removeClass(_.without(types, type)[0]).addClass(type);
最简单的解决方案是分别对toggleClass()
两个类。
假设您有一个图标:
<i id="target" class="fa fa-angle-down"></i>
要在fa-angle-down
和之间fa-angle-up
进行切换,请执行以下操作:
$('.sometrigger').click(function(){
$('#target').toggleClass('fa-angle-down');
$('#target').toggleClass('fa-angle-up');
});
由于我们fa-angle-down
一开始没有fa-angle-up
每次都切换两者,所以其中一个离开而另一个出现。
onclick=""
)不好。您为什么不使用jQuery注册适当的事件处理程序(如果您有很多具有相同处理程序的元素,则使用委托/实时事件)