jQuery的.hasClass()方法有什么相反的方法?

32

我正在使用hasClass()方法,在if语句中验证一个元素是否拥有指定的类。

如果我想要在if语句中检查一个元素是否没有指定的类,应该怎么做?非常感谢你们的回复。

7个回答

70

为什么不直接这样做:

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

25

更一般地说,在JavaScript中,要检查布尔结果的相反值,可以使用逻辑非运算符!

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)')

关于:not()选择器的说明


还有另一种方法可以实现这个。如果你想从一个已有的集合中移除元素,你可以使用 .not() 方法(参见 http://api.jquery.com/not/)。例如:`$('.book p').addClass('referenceable').not('.aside').addClass('numbered');` - Shawn

8
if (!element.hasClass('classname')) {
    ...
}

2
if (!($('class/id/objct').hasClass('class name'))) {
       //codes here...
 }

2

您可以使用

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

如果您需要检查超过一个类或者...
el.is(':not(.secondClass)')

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


1

如果有人寻找与我相同的东西,我会将此答案添加到池中,并对.hasClass()进行一些澄清。

根据规范:

.hasClass() - "确定是否为任何匹配的元素分配了给定的类。"

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

!$('selector').hasClass('classname') 基本上相当于 - "确定没有匹配的元素被分配了给定的类"。

而在我的情况下,"与.hasClass()相反" 转化为 - "确定是否有任何匹配的元素没有被分配给定的类".

区别在于我想知道所有元素是否都具有该类。因此,这成为我的解决方案:

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

基本上,如果有元素没有这个类,则长度将设置条件为true。
希望这能帮助到某些人。

0

要使用链式编程,您可以使用过滤器。

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

3
.not()也可以这样用:$(...某个选择器...).not('.yourclass').each-or-do-more - Shawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接