我有,
<tr valign="top">
<th class="chkCol fixed">..checkbox..</th>
<th class="fixed">..head..</th>
</tr>
Run Code Online (Sandbox Code Playgroud)
现在在Jquery我调用的函数就像,
if($(this).hasClass("fixed")){
....
}
Run Code Online (Sandbox Code Playgroud)
如果我打电话$(this).hasClass("fixed"),那么我需要得到只有头而不是复选框,这在Jquery 1.4.2中工作得很好,但现在我更新到jquery 1.6.1.现在,如果有条件,我会收到复选框.
请帮忙,
提前致谢
如果jQuery 1.4.2出错,我会非常惊讶 jQuery 1.4.2不会出错.hasClass("fixed")在所有版本的jQuery中都应该是真实的.这是使用v1.6.1 的示例,以及使用v1.4.2 的相同示例.两者都很好.
如果你想检查"修复"它是元素上唯一的类,没有jQuery就更容易完成,直接转到反射属性:
if (this.className === "fixed") {
// ...
}
Run Code Online (Sandbox Code Playgroud)
className 是一个反映"class"属性的属性,就像"class"属性一样,它是一个以空格分隔的字符串.
当然,如果元素上还有任何其他类,例如"fixed something-else",则上述操作将失败.
如果您特别想要检查它是否已"修复"并且没有"chkCol",那么您必须故意这样做:
var $this = $(this);
if ($this.hasClass("fixed") && !$this.hasClass("chkCol")) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您在选择器中执行此操作(而不是检查已有的元素),则可以使用选择器".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"))
Run Code Online (Sandbox Code Playgroud)
在那种情况下,因为x是1,||甚至根本没有看到任何权利; 表达式的值已经存在true.
更新2:
你已经说过你正在使用hasClass,但在评论你说的另一个答案时:
如果我使用
$(this).attr('class') == "fixed",那么根本不会进入条件
我不认为你实际做的是这个:
if ($(this).attr('className') == "fixed") {
// ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是"className",而不是"class".如果这就是你正在做的事情,那将不适用于1.6.1,但它将在1.4.2上运行.没有名为"className"的属性 ; 有一个名为"class"的属性和一个名为"className" 的属性.jQuery 1.6.x区分属性和属性.
上面的代码,使用hasClass,将适用于所有版本.或者更改您的代码attr("class")而不是使用attr("className").
这是一个显示attr("className")工作的v1.4.2示例(它不应该).这是一个v1.6.1示例,显示attr("className")无法正常工作(这是正确的).两个版本都显示了获取"class"属性的正确方法.