检查元素是否具有一个类而不是另一个类返回true

时间:2015-03-30 19:04:21

标签: javascript jquery

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

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

2 个答案:

答案 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 
}

那将检查是否存在任何类,然后将其反转(所以不存在)。