0

延伸到我以前的问题 如何选择具有多个类的跨度并放置在锚点内?

**为此添加扩展,我想添加一个需要从点击事件中忽略的类。因此我使用了下面不起作用的代码。任何帮助将不胜感激!

$('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>
4

2 回答 2

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(我基于此 jQuery 功能请求,但对其进行了更新,使其适用于 jQuery 自 1.8 版以来使用的新 Sizzle 选择器引擎)。

包含该过滤器后,您可以:any在选择器中使用它,它可以很好地与:not

$(document.body).on('click', 'span:any(.c3, .c4):not(.c5)', function (e) {
    alert("clicked!");
});

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

于 2013-01-25T16:15:59.143 回答
1

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

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

这是一个jsFiddle 演示

于 2013-01-25T16:16:45.123 回答