在jQuery中切换2个类的最简单方法


217

如果我有.A类和.B类,并且想在单击按钮之间进行切换,那么jQuery中有什么好的解决方案?我还是不明白如何toggleClass()运作。

是否有内联的解决方案以将其置于onclick=""事件中?


5
内联JS(onclick="")不好。您为什么不使用jQuery注册适当的事件处理程序(如果您有很多具有相同处理程序的元素,则使用委托/实时事件)
ThiefMaster 2011年

Answers:


511

如果您的元素A从一开始就公开类,则可以编写:

$(element).toggleClass("A B");

这将删除class A并添加class B。如果再次执行此操作,它将删除class B并恢复class A

如果要匹配公开任何一个类的元素,则可以使用多个 类选择器并编写:

$(".A, .B").toggleClass("A B");

3
如果要根据状态将类A或B代替元素,该怎么办?
Stewie Griffin

1
请注意,应该缓存要尝试切换的对象,而不是每次都选择元素,切换类的最常见用法是在单击处理程序中。var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
mummybot

1
@mummybot-被标记为居高临下。Frédéric-如果元素“从头开始”没有任何类怎么办?那也是一个重要的状态。
vsync

3
这不再起作用。现在同时添加和删除两个类。
法比安(Fabián)'18年

1
@FrédéricHamidi我不知道自己做错了什么,但是尝试时没有用。现在看起来不错。就我而言,它同时添加和删除了两个类,但现在似乎可以正常工作了。可能我弄乱了其他东西,并影响了此功能。我删除了我的评论。对困惑感到抱歉。
BurakUeda

40

这里是一个简化的版本:虽然不是优雅,但易于后续

$("#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
});

3
我相信togglejquery 2.0中
描述了

3
谢谢vittore。显然,这是2011年以来的较旧答案。我已经相应更新了语法。
里恩·威廉姆斯

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

2

您的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

这是另一种“非常规”方式。

  • 它暗示使用下划线lodash
  • 它假定您在以下环境中:
    • 元素没有初始化类(这意味着您不能执行toggleClass('a b'))
    • 您必须从某个地方动态获取课程

这种情况的一个示例可能是具有要在另一个元素(例如容器中的选项卡)上切换的类的按钮。

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

-1

最简单的解决方案是分别对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每次都切换两者,所以其中一个离开而另一个出现。


-1

使用Jquery在两个类“ A”和“ B”之间切换。

$('#selecor_id')。toggleClass(“ A B”);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.