扩展到我之前的问题 How to select a span with multiple classes and placed inside an anchor?
**为此添加扩展,我想添加一个需要在click事件中忽略的类。因此我使用下面的代码不起作用。任何帮助将不胜感激!
$('span.c3, span.c4:not(.c5)').parents('a').click(function (e) {
alert("clicked!");
});
我也尝试在非选择器中使用span.c5,但这也不起作用:(
请在下面找到html更改:
<div class="c0 c">
<a class="c1 c2">
<span class="c3 c4 c5"></span>Anchor_Text
</a>
</div>
答案 0 :(得分:3)
您可以使用.not
,它会过滤您选择的所有元素:
$('span.c3, span.c4').not('.c5').parents('a').click(function (e) {
alert("clicked!");
});
顺便说一下,你确定你想要的是parents
吗?我认为你真正想要的是closest
。
这是小提琴:http://jsfiddle.net/GCNKg/
更新:由于您在评论中提到必须使用:not
选择器,因为您正在使用事件委派,因此您必须添加:not
到每个选择器,或者只是将以下过滤器添加到您的脚本中:
$.expr[':'].any = $.expr.createPseudo(function( selector ) {
return function (el) {
return $.find.matches(selector, [el]).length > 0;
}
});
这会将:any
选择器添加到jQuery / Sizzle(我基于this jQuery feature request,但更新它以便它与the new Sizzle selector engine used by jQuery since version 1.8配合使用。)
包含该过滤器后,您可以在选择器中使用:any
,这样可以很好地与:not
配合使用:
$(document.body).on('click', 'span:any(.c3, .c4):not(.c5)', function (e) {
alert("clicked!");
});
答案 1 :(得分:1)
使用.not()
功能,而不是选择器。例如:
$('span.c3, span.c4').not('.c5').parents('a').click(function (e) {
alert("clicked!");
});
这里是jsFiddle demo。