【问题标题】:jQuery opposite of .hasClass()?.hasClass() 的 jQuery 对立面?
【发布时间】:2012-01-22 13:30:49
【问题描述】:

我正在使用hasClass() 在我的 if 语句中验证元素是否具有给定的类。

如果元素没有给定的类,我如何检查我的 if 语句?提前感谢您的回复。

【问题讨论】:

    标签: jquery class


    【解决方案1】:

    为什么不简单:

    if (!el.hasClass('foo')) {
      // code
    }
    

    【讨论】:

      【解决方案2】:

      更一般地,在 javascript 中,要检查布尔结果的反面,请使用逻辑 NOT 运算符!

      var isValid = false;
      if (!isValid) {
          // execute if isValid = false;
      }
      

      对于您的问题,.hasClass() 如果元素具有指定的类,则返回布尔值,因此如果您有表达式:

      <div class="someClass"></div>
      
      if ($('div').hasClass('someClass')) {
          // will execute
      }
      

      检查它是否没有该类:

      if (!$('div').hasClass('someClass')) {
          // will not get here because our element has the class "someClass"
      }
      

      在选择元素的时候,如果想避开有一定类的,可以使用:not()伪选择器:

      $('div:not(.someClass)')
      

      About the :not() selector

      【讨论】:

      • 还有另一种方法可以做到这一点。如果要从现有集合中删除元素,可以使用.not()(请参阅api.jquery.com/not)。示例:$('.book p').addClass('referenceable').not('.aside').addClass('numbered');
      【解决方案3】:
      if (!element.hasClass('classname')) {
          ...
      }
      

      【讨论】:

        【解决方案4】:

        你可以使用

        el.is('.oneClass:not(.secondClass)')
        

        如果您需要检查多个类或

        el.is(':not(.secondClass)')
        

        如果你只需要检查一个类。

        【讨论】:

          【解决方案5】:
          if (!($('class/id/objct').hasClass('class name'))) {
                 //codes here...
           }
          

          【讨论】:

            【解决方案6】:

            要使用 chaning,您可以使用过滤器。

            $(...some selector...).filter(function (){ 
                return !$(this).hasClass('yourclass');
            }).each-or-do-more
            

            【讨论】:

            • .not() 也允许这样做:$(...some selector...).not('.yourclass').each-or-do-more
            【解决方案7】:

            我会将这个答案添加到池中,以防有人正在寻找与我相同的东西,并首先澄清一下 .hasClass()

            根据规格:

            .hasClass() - “确定任何个匹配的元素是否被分配给给定的类。”

            因此,如果我将 .hasClass() 与匹配多个元素的 jQuery 选择器/元素以及 not 语句一起使用,那么它的行为会有所不同:

            !$('selector').hasClass('classname') 基本上会转换为 - “确定是否没有匹配的元素被分配给给定的类”。

            在我的例子中,“.hasClass() 的反义词” 被翻译为 - “确定是否有任何匹配的元素没有分配给给定的类"。

            不同之处在于我想知道是否所有元素都有类。所以这成为了我的解决方案:

            if($('jQuery selector/element').not('.my-class').length) 
            {
                ...
            }
            

            基本上,如果有元素没有类,那么长度会将条件设置为真。

            希望这对某人有所帮助。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-01-15
              • 2018-07-20
              • 2017-04-23
              • 2014-12-02
              • 2012-01-14
              • 2018-01-27
              • 1970-01-01
              相关资源
              最近更新 更多