我正在尝试检查元素是否具有两个类之一。如果没有,它应该运行其他功能。我正在使用||
或运算符,但是无论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/