0

以前の私の投稿によると (複数のクラスを持つスパンを選択し、アンカー内に配置する方法は?)

提案されたソリューションに従って実装しましたが、追加のシナリオができるまで完璧に機能しました。

以前に提案されたソル:

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

しかし、今では別のシナリオがあり、クリック イベントをアンカーにスパンなしでバインドしたいと考えています。

アンカー定義:

<a href="#">LINK_TEXT</a>

したがって、このシナリオのコードを以下に示します。

$('a').not('.ignore_class').click(function (e) { alert("clicked!"); });

ここで直面している問題は、スパンのあるアンカーをクリックしたときです。スパンのないアンカーのクリック イベントが発生します。

誰でもこのシナリオを解決するのを手伝ってもらえますか? 本当にありがとう!!

4

2 に答える 2

0

:not with :hasセレクターを使用してawithspanタグを除外します

$('a:not(:has(span))').click(function(){

});

次に、このようなスパンを持つものを選択できます

$('a:has(span)') // <-- you can also pass in your span class if you want

フィドル

あなたの .ignoreclass はアンカーではなくスパンレベルにあるようです.not()を使用すると、現在のコレクション内の要素のみがフィルタリングされます。したがって、そのように使用するには、次のようにすることができます

$('a').not('a:has(.ignore_class)')
于 2013-01-28T21:09:20.907 に答える
0

おそらく必要なのは、イベントを適切な順序で添付し、優先したいイベント (より具体的なもの) で関数を次のように終了することです。

e.stopPropagation();

これにより、より具体的なイベントが発生した後に、より一般的なイベント (つまり、 all に関連付けられたイベントa) が発生するのを防ぐことができます。

または、このシナリオを推論するおそらくより簡単な方法は、単一のイベントを作成して、どの種類のリンクがクリックされたかをテストすることです。

$('a').click(function()
{
   if ($(this).find('span.c3.c4').not('.ignoredClass').length > 0)
   {
      // event for special links with spans in them
   }
   else
   {
      // event for normal links
   }
});
于 2013-01-28T20:18:50.400 に答える