我会非常惊讶如果jQuery 1.4.2出现错误 jQuery 1.4.2不会出错。在所有版本的jQuery中,hasClass(“fixed”)
都应为true。这里是一个使用v1.6.1的示例,以及使用v1.4.2的相同示例,两者都可以正常工作。
如果你想检查一个元素上是否只有“fixed”类,那么可以直接访问反映属性,而不需要使用jQuery进行更轻松的操作:
if (this.className === "fixed") {
// ...
}
className
是反映“class”属性的一个属性,并且像“class”属性一样,它是由空格分隔的字符串。
当然,如果元素上还有其他类,例如“fixed something-else”,则上述方法将失败。
如果您想要特别检查它是否具有“fixed”并且没有“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
,所以在
||
右侧的任何内容都不会被检查;表达式的值已经是
true
。
更新2:
你说你正在使用hasClass
,但在另一个答案的评论中你说:
如果我使用$(this).attr('class') == "fixed"
,那么根本不会进入if条件
我不确定你实际上是在做这个:
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")
。
这是一个v1.4.2示例,演示了
attr("className")
的工作方式(它不应该起作用)。
这是一个v1.6.1示例,演示了
attr("className")
不起作用的正确方式。两个版本都展示了获取“class”属性的正确方法。