我有,
<tr valign="top">
<th class="chkCol fixed">..checkbox..</th>
<th class="fixed">..head..</th>
</tr>
现在在Jquery中我调用的函数是
if($(this).hasClass("fixed")){
....
}
如果我调用$(this).hasClass("fixed")
,那么我需要只获取头部而不是复选框,这在Jquery 1.4.2中工作正常,但现在我更新到jquery 1.6.1。
现在我在条件中收到了复选框。
请帮助,
提前致谢
答案 0 :(得分:9)
如果jQuery 1.4.2出错,我会非常惊讶 jQuery 1.4.2没有错。在所有版本的jQuery中,hasClass("fixed")
都适用于这两种情况。 Here's an example使用v1.6.1,the same example使用v1.4.2。两者都很好。
如果你想检查“修复”它是一个元素上的 only 类,没有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
,所以||
右边的任何内容都没有看到;表达式的值已经是true
。
更新2 :
你说过你正在使用hasClass
,但在评论你说的另一个答案时:
如果我使用
$(this).attr('class') == "fixed"
,那么根本不会进入条件
我不认为你实际在做的是这个:
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”属性的正确方法。
答案 1 :(得分:3)
你可以这样做:
if ($(this).attr('className') === 'fixed')
或者:
if ($(this).not('.chkCol').hasClass('fixed'))
我认为最好确保“chkCol”元素从不首先获得“固定”类。
编辑 - 永远敏感的@T。 J. Crowder正确指出,从.jQuery 1.6开始,“。attr()”是从元素中获取属性值的错误方法。有一定程度的天使针舞涉及解释为什么会这样,但足以说你现在使用:
if ($(this).prop('className') === 'fixed')
答案 2 :(得分:1)
似乎更新修复了一个错误,然后:) hasClass("fixed")
应该对这两个th
元素定义为true。
至于你的问题,要么明确排除chkCol
类:
if ($(this).hasClass("fixed") && !$(this).hasClass("chkCol")) {
或找到一些标识您要查找的元素的标准(标记名称,ID,另一个专用类等)。
答案 3 :(得分:1)
那么,它肯定是jQuery 1.4.2中的一个错误,因为<th class="chkCol fixed">..checkbox..</th>
显然有“固定”类。
如果你想获得一个只有“固定”类的元素你可以做
($(this).attr('class') == "fixed")
答案 4 :(得分:1)
也许你应该使用attr()代替:
if($(this).attr("class") == "fixed"){
....
}