如果我有类.A和类.B并想在按钮单击之间切换,那么在jQuery中有什么好的解决方案?我仍然不明白toggleClass()
是如何运作的。
是否有内联解决方案将其置于onclick=""
事件中?
答案 0 :(得分:461)
如果您的元素从一开始就公开了类A
,您可以写:
$(element).toggleClass("A B");
这将删除课程A
并添加课程B
。如果您再次执行此操作,则会删除课程B
并恢复课程A
。
如果你想匹配暴露任何一个类的元素,你可以使用multiple class selector并写:
$(".A, .B").toggleClass("A B");
答案 1 :(得分:35)
以下是简化版本:(虽然不优雅,但易于理解)
$("#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
});
答案 2 :(得分:4)
我已经制作了一个用于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');
答案 3 :(得分:1)
这是另一种“非传统”方式。
此场景的一个示例可能是具有要在另一个元素上切换的类的按钮(比如容器中的选项卡)。
// 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);
答案 4 :(得分:1)
您的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 àlajQuery :
$('.selector').toggleClass('A', !state).toggleClass('B', state);
答案 5 :(得分:-1)
使用Jquery在两个类“ A”和“ B”之间切换。
$('#selecor_id')。toggleClass(“ A B”);
答案 6 :(得分:-2)
最简单的解决方案是单独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
,因此会留下另一个出现。