我正在尝试检查一个元素是否具有两个类之一。如果没有,那么它应该运行一些其他功能。我正在使用 ||
或运算符,但是无论 if 语句如何,它总是返回 true 并运行内部功能,这不是我所期望的。我的语法错误吗?
if (!elm.hasClass('report-error') || !elm.hasClass('data-error')) {
// Do something
}
最佳答案
当元素不具有两个类时,您的条件将为 true,其中包括元素既没有类也没有类或只有其中一个类的情况。仅当元素同时具有两个类时它才会变为 false。
您当前的条件是 (!A OR !B),逻辑上等同于 !(A AND B)。
听起来您希望当元素没有这两个类中的任何一个时它为 true。在这种情况下,您想要的是 !(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 语句中处理“两者都不是”的情况来保持它 super 简单(并且更具可读性):
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/