<div id="b"><div> <div> jQuery: $('#a').delegate('a', 'click', function(){ //do stuff }); delegates #b0 as well. NB /// links inside divs are added and detached dynamically ///"> <div id="b"><div> <div> jQuery: $('#a').delegate('a', 'click', function(){ //do stuff }); delegates #b0 as well. NB /// links inside divs are added and detached dynamically ///"> <div id="b"><div> <div> jQuery: $('#a').delegate('a', 'click', function(){ //do stuff }); delegates #b0 as well. NB /// links inside divs are added and detached dynamically ///" />

div> divs>内のjQueryデリゲートも:(

html:

<div id="a">
  

  <div id="b"><div>
<div>

jQuery:

$('#a').delegate('a', 'click', function(){ //do stuff });

delegates #b0 as well. Is there any clever selector way of ways to ignore #b ?

NB /// links inside divs are added and detached dynamically ///

ty

4
jQuery 1.7以降では .delegate()がサポートされていますが、新しい .on()関数はこれを置き換えるもので、イベントバインディングの一般的な)。イベント( 'クリック')とセレクタ(サンプルの「a」またはLukeの推奨バリアント)が逆の場合を除き、構文はほぼ同じです。
追加された 著者 Greg Pettit,
.on()は基本的に.bind()であり、.delegate()は1つにロールアップされ、パフォーマンスの向上はリファクタリングのために偶然です。 .on()は高速になる(リファクタリングされているため)、両方とも同等のブラウザ間で互換性があります。
追加された 著者 Greg Pettit,
よく尋ねられた、upvoted :)
追加された 著者 Luke Schafer,
.on()vs .delegate():性能とブラウザの互換性はどうですか?
追加された 著者 a clever name,

4 答え

あなたがそれが直接的な子孫だけであることを知っていれば

$('#a').delegate('#a>a', 'click', function(){ alert('a') });

あなたがbの子供たちを無視したいと知っているなら、試してみてください

$('#a').delegate('a:not(#b>a)', 'click', function(){ alert('a') });

EDIT: a fiddle

5
追加された
心配ない。 FYI私はあなたの要素を識別するためにクラスを使用することについて考えています。なぜなら、後で少しだけ簡単にリストラを行うからです(何が起こっているのかがはっきりしています)
追加された 著者 Luke Schafer,
ありがとうございました:)デリゲートの中でセレクタを作るために私を驚かせたことはありません
追加された 著者 a clever name,

jQuery1.7以上

$('#a').on('click', '#a0', function(event) {
    alert(event.target.id);
});
1
追加された
他の人がコメントしたように、彼はイベントをバインドすることなく後で動的に要素を追加できるように、本質的に「ライブ」イベントを望んでいます(親に委任されました)。
追加された 著者 Luke Schafer,

デリゲートメソッドの最初のフィールドはセレクタです。今のところ、すべてのアンカーを選択しています。代わりにidを使用してください。

1
追加された
彼は、#bにあるものを除いて、彼が追加する任意の 'a'
追加された 著者 Luke Schafer,
まったく正しい:)私はその質問に対してその効果についてコメントをした。元の誤った(間違ったかもしれないのでしょうか?)答えの代わりにあなたの提案を含めるように答えが似ていると良い考えです
追加された 著者 Luke Schafer,
いいえ、いいえ、私はあなたがあなたの分析に間違っていると思っていました(おそらく、NBを読んでいなかった)。まったく間違っていたのとは対照的にです:)基本的に、私はあなたが彼の必要性に答えたとは思わない - あなたが話していることを知っているのではなく、誤解している可能性が高いからです。
追加された 著者 Luke Schafer,
クラスの下でそれらをグループ化することができます。
追加された 著者 allwyn.menezes,
私の答えは誰にも誤解を与えるだろうとは思わない。とにかく誰もが意見を持っています。私はあなたを尊敬:)
追加された 著者 allwyn.menezes,

これは期待どおりに動作しています。あなたの delegate()呼び出しは、セレクタ a に一致する #a の下のすべての子のイベントハンドラを設定します。

特定の要素のハンドラを設定しようとしている場合は、それを行います

$('#a0').click(function(){ ... });

また、あなたのHTMLはかなり壊れています。終了タグが実際に閉じていることを確認します。

0
追加された
@GregPettitこれは私が彼の質問を読んでいる方法ではありませんが、 aX アンカーも動的に追加されていると仮定すると、はいです。
追加された 著者 Ilia G,
.click()エイリアスはリスナーをselfに設定します。ほとんどの人はこれを望まないので、 .delegate()/ .on()を(委譲ツールとして)使用します。
追加された 著者 Greg Pettit,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript