【问题标题】:toggle class not replacing the class切换类不替换类
【发布时间】:2016-03-14 17:59:47
【问题描述】:

我有一些像这样的字体很棒的图标:

<a class="allarme" id="allarme1" href="#">
    <i class="fa fa-toggle-off"></i> <!--<span>Avvia</span>-->
</a>

我想替换单击时的图标,因此我需要更改 i 类。例如从fa-toggle-offfa-toggle-on

所以我写了这段代码:

$('.allarme').click(function(e){
    e.preventDefault();
    console.log("clicked");
    $(this).find("i").toggleClass(".fa-toggle-off .fa-toggle-on");
});

控制台告诉我事件被正确触发但类没有被切换。我试图检查SO previous questions,我发现与另一个问题的正确解决方案相同的代码。我错过了什么?

【问题讨论】:

  • 您在toggleClass 通话中留下了. 的错字吗?
  • 这是我没有注意到的原始代码中的错字... :) OMG!谢谢@Stryner
  • 不应该是$(this).find("i").toggleClass("fa-toggle");,如果不存在则添加它,如果存在则删除它?
  • @LGSon 你必须删除 -off 并添加 -on 来替换图标。它是开启和关闭之间的切换。
  • @LelioFaieta 好的,很公平;兼容性绝对高于一切。像我这样势利的人可能会“纠正”图标显示 CSS 以在课程不存在时使用一个图像,如果课程不存在则使用另一个图像。不过这不是主要问题,而且它是可读的,所以应该没问题。

标签: javascript jquery


【解决方案1】:

jQuery.toggleClass() 最多需要 2 个参数:

  1. 类名
  2. 状态

如果你想删除一个类,每次点击某个东西时重新添加它,你只需要提供类名

$('.allarme').click(function(e){
    e.preventDefault();
    $(this).find("i").toggleClass("fa-toggle");
});

如果您希望交换两个不同的类,您的代码将需要更多逻辑:

$('.allarme').click(function(e){
    e.preventDefault();

    var $i = $( this ).find( 'i' )

    if ( $i.hasClass( 'fa-toggle-off' ) ) {
        $i.removeClass( 'fa-toggle-off' ).addClass( 'fa-toggle-on' )
    } else {
        $i.removeClass( 'fa-toggle-on' ).addClass( 'fa-toggle-off' )
    }
});

我建议您使用第一种方法。无论是从 JavaScript 的角度来看,还是从函数式 CSS 的角度来看,它都更加简洁。

【讨论】:

  • 谢谢,但这个问题只是一个错字,已经修复。无论如何请注意,我只用一行代码就完成了你所做的一切;)
猜你喜欢
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2015-06-08
  • 2012-08-30
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
相关资源
最近更新 更多