245

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

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

4

7 回答 7

571

如果你的元素从一开始就暴露了类A,你可以这样写:

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

这将删除 classA并添加 class B。如果您再次这样做,它将删除 classB并恢复 class A

如果要匹配暴露任一类的元素,可以使用 类选择器并编写:

$(".A, .B").toggleClass("A B");
于 2011-08-09T19:48:51.940 回答
42

这是一个简化版本:(虽然不优雅,但易于理解

$("#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
});
于 2011-08-09T19:50:03.427 回答
5

我制作了一个用于 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);
  });
};

// usage example:
$(document.body).on('click', () => {
  $(document.body).toggle2classes('a', 'b')
})
body{ height: 100vh }
.a{ background: salmon }
.b{ background: lightgreen }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
Click anywhere

于 2015-09-21T23:01:31.343 回答
4

您的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 à la jQuery

$('.selector').toggleClass('A', !state).toggleClass('B', state);
于 2016-09-09T04:25:49.433 回答
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每次都切换两者,因此一个离开另一个出现。

于 2018-03-16T07:53:20.363 回答
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);
于 2016-05-09T14:32:17.780 回答
0

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

$('#selecor_id').toggleClass("A B");

于 2019-07-03T11:50:30.187 回答