<tr valign="top"> <th class="chkCol fixed">..checkBox..</th> <th class="fixed">..head..</th> </tr>
if($(this).hasClass("fixed")){ .... }
如果我调用$(this).hasClass(“fixed”),那么我需要只得到头而不是复选框,这在Jquery 1.4.2中工作得很好,但现在我更新到了jquery 1.6.1.
现在,如果有条件,我会收到复选框.
请帮忙,
提前致谢
解决方法
如果你想检查“修复”它是元素上唯一的类,没有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”属性的正确方法.