Jquery hasClass用于多个类

我有,

 ..checkbox.. ..head..  

现在在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。 这是使用v1.6.1 的示例 ,以及使用v1.4.2 的相同示例 。 两者都很好。

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

 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")) 

在这种情况下,因为x1 ,所以||的右边没有任何内容 甚至看都是这样; 表达式的值已经是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”属性的正确方法。

你可以这样做:

 if ($(this).attr('className') === 'fixed') 

要不然:

 if ($(this).not('.chkCol').hasClass('fixed')) 

我认为最好确保“chkCol”元素从不首先获得“固定”类。

编辑 – 永远敏感的@TJ Crowder正确地指出“.attr()”,从jQuery 1.6开始,是从元素获取属性值的错误方法。 在解释为什么会这样的情况下,有一定程度的天使针跳舞,但足以说你现在使用:

 if ($(this).prop('className') === 'fixed') 

似乎更新修复了一个错误,然后:) hasClass("fixed")应该对这两个元素都定义为true。

至于你的问题,要么明确排除chkCol类:

 if ($(this).hasClass("fixed") && !$(this).hasClass("chkCol")) { 

或找到一些标识您正在寻找的元素的其他标准(标签名称,ID,另一个专用类等)。

那么,它肯定是jQuery 1.4.2中的一个错误,因为很明显

..checkbox..

具有“固定”类。

如果你想获得一个只有“固定”类的元素,你可以做到

 ($(this).attr('class') == "fixed") 

也许你应该使用attr()代替:

 if($(this).attr("class") == "fixed"){ .... }