微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Jquery hasClass用于多个类

我有,
<tr valign="top">
    <th class="chkCol fixed">..checkBox..</th>
    <th class="fixed">..head..</th>
</tr>

现在在Jquery我调用函数就像,

if($(this).hasClass("fixed")){
   ....
}

如果我调用$(this).hasClass(“fixed”),那么我需要只得到头而不是复选框,这在Jquery 1.4.2中工作得很好,但现在我更新到了jquery 1.6.1.
现在,如果有条件,我会收到复选框.

请帮忙,

提前致谢

解决方法

如果jQuery 1.4.2出错,我会非常惊讶jQuery 1.4.2不会出错.在所有版本的jQuery中,hasClass(“fixed”)在两种情况下都应该为true. Here’s an example使用v1.6.1,而 the same example使用v1.4.2.两者都很好.

如果你想检查“修复”它是元素上唯一的类,没有jQuery就更容易完成,直接转到反射属性

if (this.className === "fixed") {
    // ...
}

className是反映“class”属性属性,就像“class”属性一样,它是一个以空格分隔的字符串.

当然,如果元素上还有任何其他类,例如“fixed something-else”,则上述操作将失败.

如果您特别想要检查它是否已“修复”并且没有“chkCol”,那么您必须故意这样做:

var $this = $(this);
if ($this.hasClass("fixed") && !$this.hasClass("chkCol")) {
    // ...
}

如果你在选择器中执行此操作(而不是检查已有的元素),则可以使用选择器“.fixed:not(.chkCol)”.但是虽然你可以使用is已经拥有的元素来做到这一点,但它不必要地昂贵(jQuery必须解析选择器).

更新:你说你已经尝试了&& !$this.hasClass(“chkCol”)的事情并没有奏效.这意味着if条件中的某些东西已经确定了整个表达式的结果,因此!$this.hasClass(“chkCol”)部分的结果没有区别(并且根本没有运行,作为JavaScript短路表达式).

例:

var x = 1;

if (x == 1 || $this.hasClass("fixed") && !$this.hasClass("chkCol"))

在这种情况下,因为x是1,所以||的右边没有甚至看都是这样;表达式的值已经是真的.

更新2:

你已经说过你正在使用hasClass,但在评论你说的另一个答案时:

If i use $(this).attr('class') == "fixed",then not at all going into if condition

我不认为你实际做的是这个:

if ($(this).attr('className') == "fixed") {
    // ...
}

请注意,这是“className”,而不是“class”.如果这就是你正在做的事情,那将不适用于1.6.1,但它将在1.4.2上运行.没有名为“className”的属性;有一个名为“class”的属性一个名为“className”的属性. jQuery 1.6.x区分属性属性.

上面的代码,使用hasClass,将适用于所有版本.或者将代码更改为使用attr(“class”)而不是attr(“className”).

Here’s a v1.4.2 example显示attr(“className”)工作(它不应该). Here’s a v1.6.1 example显示attr(“className”)无法正常工作(这是正确的).两个版本都显示获取“class”属性的正确方法.

原文地址:https://www.jb51.cc/jquery/154844.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐