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

Ste*_*fin 208 jquery toggleclass

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

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

Fré*_*idi 480

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

$(element).toggleClass("A B");
Run Code Online (Sandbox Code Playgroud)

这将删除类A并添加类B.如果你再次这样做,它将删除类B并恢复类A.

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

$(".A, .B").toggleClass("A B");
Run Code Online (Sandbox Code Playgroud)

  • 如果不是元素我想根据状态放置A类或B类呢? (3认同)
  • 这不再起作用了.现在同时添加和删除这两个类. (3认同)

Rio*_*ams 38

下面是一个简化版本:(虽然不是优雅,但易于后续)

$("#yourButton").toggle(function() 
{
        $('#target').removeClass("a").addClass("b"); //Adds 'a', removes 'b'

}, function() {
        $('#target').removeClass("b").addClass("a"); //Adds 'b', removes 'a'

});
Run Code Online (Sandbox Code Playgroud)

或者,类似的解决方案:

$('#yourbutton').click(function()
{
     $('#target').toggleClass('a b'); //Adds 'a', removes 'b' and vice versa
});
Run Code Online (Sandbox Code Playgroud)

  • 我相信这种使用`toggle`的方式在jquery 2.0中被删除了 (3认同)
  • 谢谢vittore.从2011年开始,这显然是一个较旧的答案.我已经相应地更新了语法. (2认同)

vsy*_*ync 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')
})
Run Code Online (Sandbox Code Playgroud)
body{ height: 100vh }
.a{ background: salmon }
.b{ background: lightgreen }
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
Click anywhere
Run Code Online (Sandbox Code Playgroud)


小智 5

最简单的解决方案是toggleClass()分别处理两个类。

假设您有一个图标:

    <i id="target" class="fa fa-angle-down"></i>
Run Code Online (Sandbox Code Playgroud)

要在两者之间切换fa-angle-downfa-angle-up请执行以下操作:

    $('.sometrigger').click(function(){
        $('#target').toggleClass('fa-angle-down');
        $('#target').toggleClass('fa-angle-up');
    });
Run Code Online (Sandbox Code Playgroud)

因为我们fa-angle-down一开始就没有fa-angle-up每次切换两者时,一个会离开另一个出现。