如何检查元素是否没有特定的类?


232

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

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

Answers:


484
if (!$(this).hasClass("test")) {

34
在TIMTOWTDI方面,这是一个可怕的解决方案:if($(this).is(":not(.test)"))> :)
Phrogz 2011年

6
TIMTOWTDIBSCINABTE
Fizzix

25
万一有人怀疑:这样做的方法不止一种,但是有时候一致性也不是一件坏事。
Captain Hypertext

145

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

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

8
恕我直言,您的答案是最好的。如果sdleihssirhc的答案是正确的,而不是这个问题与jQuery没有任何关系,那么最好将其表述为“给定条件,我如何测试该条件在Javascript中不成立”。我们想要的jQuery是像对单个对象一样容易地对整个DOM元素集合进行操作。您的答案仅提供了该解决方案。+1
Stijn de Witt

1
@byronyasgur在原始问题中,发布者想测试某个已知元素是否没有该类。此代码选择了没有该类的所有元素,因此不会解决发布者的问题。我不记得为什么我首先发布此内容。
JJJ 2013年

14

选择类别为“ abc”而不是类别为“ xyz”的元素(或一组元素):

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

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


6

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

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

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


8
这是完全错误的。括号不是用于类,而是用于标识属性的选择器。
Misterparker,2015年

1
其实这是完全正确的。'[class]'正确地标识(不)具有类的属性。
Deborah

@Misterparker类是属性。
马修·西拉

这会检查属性是否存在,而不是元素是否具有特定类(如类值)的情况
标记

6

您可以尝试以下方法:

<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年。请不要发布仅代码和重复的内容。
mickmackusa


0

读完这6年后,我以为我也是TIMTOWTDI .... D 的黑客,希望它不是不正确的“ JS礼节”。

我通常用条件设置一个var,然后稍后再引用它。

// 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) : '' ;

0

我不知道为什么,但是接受的答案对我不起作用。而是这样做的:

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

实际上,这将检查它是否具有“测试”类。为了检查它是否没有类“ test”,您需要具有“ === false”或“!== true”而不是“!== false”。
丽莎·塞里利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.