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"))
在这种情况下,因为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”属性的正确方法。
你可以这样做:
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中的一个错误,因为很明显
具有“固定”类。
如果你想获得一个只有“固定”类的元素,你可以做到
($(this).attr('class') == "fixed")
也许你应该使用attr()代替:
if($(this).attr("class") == "fixed"){ .... }