如何使用具有多个span类的not选择器?

时间:2013-01-25 16:14:35

标签: jquery jquery-selectors selector html

扩展到我之前的问题 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>

2 个答案:

答案 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!");
});

这是小提琴:http://jsfiddle.net/GCNKg/1/

答案 1 :(得分:1)

使用.not()功能,而不是选择器。例如:

$('span.c3, span.c4').not('.c5').parents('a').click(function (e) {
    alert("clicked!");
});

这里是jsFiddle demo