ですから、これは非常に単純な質問かもしれませんが、とにかく質問します。そして、これは明らかに、これら2つのステートメントがどのように機能するかを私の心の中で明確にするためのものです。
シナリオAjaxを介してプルしているJSONを呼び出し、それをいくつかのセレクターを持つhtmlに補間します。このような:
$.each(r, function(k,v){
str+='location: <div class=\'loc-to-select\' data-location-id=\'' + v.id + '\'>';
str+= v.name + '</div>';
});
$('#event-search-locations').html(str);
基本的に書き出す:
<div class='loc-to-select' data-location-id='2'>Joe's</div>
私はこれらの2つのjQueryを持っています:
// doesn't work
$('.loc-to-select').on('click',function(){
alert('here you go');
});
// does work
$(document).on('click','.loc-to-select', function(){
alert('here you go');
});
これはすべて、jQueryの$(document).readyの起動が終了した後に明らかに行われます。これがjQueryが提供する主な機能であると私は理解しています。私はイベントバブリングの概念に精通しています。また、ここhttp://api.jquery.com/on/ で、委任されたイベントについて説明しているドキュメントを読みました。私は、jQueryが子孫要素を介してこれをどのように行っているかを内部的に理解していません。これのいくつかは、それがユーザースペースpovからどのように処理するかを議論します:直接対委任-jQuery .on()
また、パフォーマンス上の理由から、子孫要素手法が好まれているようです。子孫要素モデルは基本的に、DOMに何か新しいものが追加された場合、それが「委任された要素」モデルに準拠しているかどうかを確認しますが、直接イベントはこれをバイパスしますか?
より単純なレベルでは、jQueryの「ランタイム」は基本的にDOMの変更を監視してからチェックしますか、それともたとえばhtml関数(基本的にはhtmlを介して認識しているアイテムを解析します)でチェックしますか?
最後に、なぜ2番目の構文(委任された構文)をデフォルトにしないのですか?(ドキュメントに記載されているように)より高い特異性とより良いパフォーマンスを提供するように思われます
どうも