我正在尝试检查元素是否具有两个类之一。如果没有,它应该运行其他功能。我正在使用||或运算符,但是无论if语句如何,它始终返回true并运行内部功能,这不是我期望的。我的语法在这里错误吗?

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

最佳答案

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

您当前有条件(!A OR!B),在逻辑上等价于!(A AND B)。

听起来当元素不具有两个类时,您希望它为真。在这种情况下,您想要的是!(A OR 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
}

关于javascript - 检查元素是否具有一个类而始终具有另一个类将返回true,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29354170/

10-13 00:36