这是我的第一个问题。
我正在使用jQuery开发一个完全Ajax系统,它在1.6.2下工作正常。当我尝试将其升级到1.7时,这段代码停止正常工作:
$("a[class!='']").live("click",function(e){
e.preventDefault();
});
在1.6.2中,如果它们有一个类,它会阻止所有超链接标记作为链接工作,但是在1.7中,它阻止所有链接作为真实链接工作,即使是那些没有类的链接。
答案 0 :(得分:6)
使用$('a[class]')
,这将选择具有class属性的所有元素。 正如我在评论中所说,如果元素甚至没有 class
属性,则检查空值可能不起作用。
更新:正如@Sidnicious所指出的,文档描述了此选择器还将选择那些没有该属性的元素。如果它不是1.6,那么它实际上肯定是该版本中的一个错误,或者他们改变了描述而没有提到它。
当然,如果您确实有一个空的class
属性,即<a class="">
,则无效。
更新2:正如@lonesomeday在评论中提到的那样,$('a[class][class!=""]')
确实按照您的预期$(a[class!=""])
工作。
正如其他人所说,您可以在jQuery 1.7中更改为on
,它统一了事件处理方法,但它无法解决您的特定问题。
答案 1 :(得分:3)
jQuery docs describe the [name!=value] selector like this:
选择既没有指定属性,也没有指定属性但没有特定值的元素。
在您的情况下,它将选择没有a
或其类不等于空字符串的每个class
。 <a></a>
和<a class=""></a>
不一样。
这实际上可能是jQuery 1.6中的一个错误!
答案 2 :(得分:1)
您可以使用.filter
在jQuery 1.7中获得所需的结果:
$('a').filter('[class]').on("click",function(e){
e.preventDefault();
});
http://jsfiddle.net/mblase75/hBehg/1/
如果您将.on
替换为.live
,则它不再有效:
http://jsfiddle.net/mblase75/hBehg/4/
尽管.bind
工作正常:
答案 3 :(得分:1)
尝试以下
$("a").live("click",function(e){
if ($(this).attr('class') === undefined) {
e.preventDefault();
}
});
我已经验证了这适用于1.7和1.6.4。它不如包含谓词的选择器理想,但它将完成工作。