检查一个元素是否有一个类与另一个类总是返回true

Checking if an element has one class vs another alway returns true

本文关键字:另一个 true 返回 有一个 是否 元素 一个 检查      更新时间:2023-09-26

我试图检查一个元素是否有两个类中的一个。如果没有,那么它应该运行其他函数。我使用||或运算符,但不管if语句如何,它总是返回true并运行内部功能,这不是我所期望的。我的语法错了吗?

if (!elm.hasClass('report-error') || !elm.hasClass('data-error')) {
     // Do something 
}

当元素不同时具有两个类时,您的条件将为true,这包括元素既没有类也只有一个类的情况。只有当元素同时具有两个类时,它才会变为false。

您当前具有条件(!A或!B),其逻辑等价于!(A和B)。

当元素不具有这两个类时,听起来您希望它为true。在这种情况下,你想要的是!(A或B),也可以写成(!A AND!B)。

这两种声明都会做你想做的事:

// !(A OR B)
if (!(elm.hasClass('report-error') || elm.hasClass('data-error'))) {
    // Has neither class, so do something else
}

或者这个:

// !A AND !B
if (!elm.hasClass('report-error') && !elm.hasClass('data-error')) {
    // Has neither class, so do something else
}

您还可以通过检查它是否有一个类或另一个类,并在ELSE语句中处理"两者都没有"的情况来保持它的超级简单(并且更可读):

if (elm.hasClass('report-error') || elm.hasClass('data-error')) {
    // Has one class or the other
} else {
    // Has neither class, so do something else
}

听起来像是一个逻辑错误-没有X或没有Y。在大多数情况下都是这样。

if (!(elm.hasClass('report-error') || elm.hasClass('data-error'))) {
 // Do something 
}

这将检查是否有任何类存在,然后将其反转(因此不存在)。

相关文章: