誰かがよりスマートな方法が見つかるまで、この問題を回避するには、選択した要素自体にイベントハンドラをアタッチすることができます
$('.tabs').click(function(event) {
event.root = this; // or whatever name suits you best
});
$(".tabs").delegate("li:not(.selected) a", "click", function (event) {
// event.root contains the DOM element
});
jQueryのイベントハンドラは、それらが結合している順に実行されることを保証します。
それとも、まったくdelegate
を使用してセレクタを自分でテストすることはありません(これはおそらく最良の解決策です):
$('.tabs').click(function(event) {
if($(event.target).is("li:not(.selected) a")) {
// this refers to the .tab DOM element
// event.target refers to the originally clicked element
}
});
更新:
元Event
オブジェクトはevent.originalEvent
から入手できます。だから、あなたができる:
$(".tabs").delegate("li:not(.selected) a", "click", function (event) {
var dom = event.originalEvent.currentTarget;
});
しかし、currentTarget
のみIE9でサポートされているようだと下IEのバージョンには選択肢がありません。
したがって、ほとんどのクロスブラウザ対応ソリューションは、依然として上記のものです。
なぜあなたはセレクタが必要なのでしょうか? – BoltClock
セレクタまたは何でも。私が「匿名」の方法で.tabにアクセスすることができれば、おそらくliの親トラバーサルよりも優れた解決策です。ページにはさまざまなタブがあり、少し異なるように扱う必要があります。 –
'.selector'がここで動作しないのは、セレクタ文字列ではなくDOMオブジェクトである' this'を囲むjQueryオブジェクトからアクセスしようとしているからです。 – BoltClock