我正在使用hasClass()
方法,在if语句中验证一个元素是否拥有指定的类。
如果我想要在if语句中检查一个元素是否没有指定的类,应该怎么做?非常感谢你们的回复。
为什么不直接这样做:
if (!el.hasClass('foo')) {
// code
}
更一般地说,在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)')
if (!element.hasClass('classname')) {
...
}
if (!($('class/id/objct').hasClass('class name'))) {
//codes here...
}
您可以使用
el.is('.oneClass:not(.secondClass)')
el.is(':not(.secondClass)')
如果你只需要检查一个类。
如果有人寻找与我相同的东西,我会将此答案添加到池中,并对.hasClass()进行一些澄清。
根据规范:
.hasClass()
- "确定是否为任何匹配的元素分配了给定的类。"
因此,如果我使用.hasClass()与一个jQuery选择器/元素一起匹配多个元素,并带有not语句,则它的行为会有所不同:
!$('selector').hasClass('classname')
基本上相当于 - "确定没有匹配的元素被分配了给定的类"。
而在我的情况下,"与.hasClass()相反" 转化为 - "确定是否有任何匹配的元素没有被分配给定的类".
区别在于我想知道所有元素是否都具有该类。因此,这成为我的解决方案:
if($('jQuery selector/element').not('.my-class').length)
{
...
}
要使用链式编程,您可以使用过滤器。
$(...some selector...).filter(function (){
return !$(this).hasClass('yourclass');
}).each-or-do-more
.not()
也可以这样用:$(...某个选择器...).not('.yourclass').each-or-do-more
。 - Shawn
.not()
方法(参见 http://api.jquery.com/not/)。例如:`$('.book p').addClass('referenceable').not('.aside').addClass('numbered');` - Shawn