我试图检查一个元素是否有两个类中的一个。如果它没有那么它应该运行一些其他功能。我使用||
或运算符但是,无论if语句如何,它总是返回true并运行内部功能,这不是我所期望的。我的语法错了吗?
if (!elm.hasClass('report-error') || !elm.hasClass('data-error')) {
// Do something
}
答案 0 :(得分:3)
当元素没有这两个类时,您的条件将成立,其中包括元素既没有类也没有其中一个类的场景。当元素同时具有两个类时,它才会变为false。
你现在有条件(!A OR!B),这在逻辑上相当于!(A和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语句中的“none”情况,你也可以保持它超级简单(并且更具可读性):
if (elm.hasClass('report-error') || elm.hasClass('data-error')) {
// Has one class or the other
} else {
// Has neither class, so do something else
}
答案 1 :(得分:1)
听起来像是一个逻辑错误 - 没有X或者没有Y.在大多数情况下都是如此。
if (!(elm.hasClass('report-error') || elm.hasClass('data-error'))) {
// Do something
}
那将检查是否存在任何类,然后将其反转(所以不存在)。