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

时间:2011-08-09 19:47:14

标签: jquery toggleclass

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

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

7 个答案:

答案 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)

这是另一种“非传统”方式。

  • 它意味着使用underscorelodash
  • 它假设您有以下情况:
    • 元素没有init类(这意味着你不能做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);

答案 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-downfa-angle-up之间切换,请执行以下操作:

    $('.sometrigger').click(function(){
        $('#target').toggleClass('fa-angle-down');
        $('#target').toggleClass('fa-angle-up');
    });

由于每次切换两者时我们的fa-angle-down开头都没有fa-angle-up,因此会留下另一个出现。