【问题标题】:How to check if an element does NOT have a specific class?如何检查元素是否没有特定的类?
【发布时间】:2011-12-12 01:35:53
【问题描述】:

我如何检查是否没有课程。例如,我知道如何检查它是否有“test”类,但是如何检查它是否没有“test”类?

if($(this).hasClass("test")){
}

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:
    if (!$(this).hasClass("test")) {
    

    【讨论】:

    • 在 TIMTOWTDI 的脉络中,这是一个可怕的解决方案:if($(this).is(":not(.test)")) >:)
    • 如果有人想知道:有不止一种方法可以做到这一点,但有时一致性也不是坏事。
    【解决方案2】:

    sdleihssirhc 的答案对于问题中的情况当然是正确的,但是如果您需要选择没有特定类的元素,则可以作为参考,您可以使用not 选择器:

    // select all divs that don't have class test
    $( 'div' ).not( ".test" );
    $( 'div:not(.test)' );  // <-- alternative 
    

    【讨论】:

    • 恕我直言,您的回答是最好的。如果 sdleihssirhc 的答案是正确的,那么这个问题与 jQuery 无关,并且会更好地表述为“在某些条件下,我如何测试该条件在 Javascript 中不正确”。我们想要使用 jQuery 对整个 DOM 元素集合进行操作,就像对单个对象一样简单。您的答案提供了该解决方案。 +1
    • @byronyasgur 在原始问题的上下文中,发帖人想要测试某个已知元素是否没有该类。这段代码选择了所有没有类的元素,所以它不能解决海报的问题。我不记得为什么我首先发布了这个。
    【解决方案3】:

    使用 .not() 方法并检查属性:

    $('p').not('[class]');
    

    在这里查看:http://jsfiddle.net/AWb79/

    【讨论】:

    • 这是完全错误的。括号不是用于类,而是用于标识属性的选择器。
    • 其实完全正确。 '[class]' 正确识别(不)拥有类的属性。
    • @Misterparker 类是属性。
    • 这会检查属性是否存在,而不是元素是否具有特定类,如类值中的情况
    【解决方案4】:

    选择具有类“abc”而不具有类“xyz”的元素(或元素组):

        $('.abc:not(".xyz")')
    

    选择常规 CSS 时,您可以使用 .abc:not(.xyz)

    【讨论】:

      【解决方案5】:

      在更复杂的情况下,这不起作用。如果你想选择一个类 A 的元素不包含类 B 的元素怎么办。 你最终需要更多类似的东西:

      If parent element does not contain certain child element; jQuery

      【讨论】:

        【解决方案6】:

        在 6 年后阅读这本书,并认为我也会对它进行破解,也是在 TIMTOWTDI 静脉...:D,希望这不是不正确的“JS 礼仪”。

        我通常会设置一个带有条件的 var,然后稍后再引用它..i.e;

        // var set up globally OR locally depending on your requirements
        var hC;
        
        function(el) {
          var $this = el;
          hC = $this.hasClass("test");
        
          // use the variable in the conditional statement
          if (!hC) {
            //
          }
        }
        

        虽然我应该提到我这样做是因为我主要使用条件三元运算符并且想要干净的代码。所以在这种情况下,我只有这个:

        hC ? '' : foo(x, n) ;
           // OR -----------
        !hC ? foo(x, n) : '' ;
        

        ...而不是这个:

        $this.hasClass("test") ? '' : foo(x, n) ;
           // OR -----------
        (!$this.hasClass("test")) ? foo(x, n) : '' ;
        

        【讨论】:

          【解决方案7】:

          你可以试试这个:

          <div id="div1" class="myClass">there is a class</div>
          <div id="div2"> there is no class2 </div>
          
          $(document).ready(function(){
              $("#div2").not('.myClass');  // do not have `myClass` class.
          });
          

          【讨论】:

          • 这个答案不会为页面增加任何价值,它是在 7 年前发布的。请不要发布纯代码和重复内容。
          【解决方案8】:

          我不知道为什么,但接受的答案对我不起作用。相反,这有效:

          if ($(this).hasClass("test") !== false) {}
          

          【讨论】:

          • 这实际上检查它是否有类“测试”。为了检查它是否没有类“test”,您需要使用“=== false”或“!==true”而不是“!== false”。
          【解决方案9】:

          试试这个。

          if (!$(object).hasClass("className")) {
          
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-13
            • 1970-01-01
            • 1970-01-01
            • 2020-06-18
            • 1970-01-01
            • 2016-05-12
            • 2020-02-11
            • 1970-01-01
            相关资源
            最近更新 更多