0

以前の拡張Q 複数のクラスがあり、アンカー内に配置されたスパンを選択するにはどうすればよいですか?

**これに拡張機能を追加して、クリックイベントから無視する必要があるクラスを追加したいと思います。したがって、私は動作しない以下のコードを使用しました。どんな助けでもありがたいです!

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

notセレクターで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 feature requestに基づいていますが、バージョン 1.8 以降の jQuery で使用される新しい 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 に答える