3

私はjQueryを学んでいますが、$('.className').bind('click',function(){})メソッドについて読んだとき、1つの疑問が生じました。

このメソッドは、イベント ハンドラーをclassNameDOM の各インスタンスにアタッチしますか? もしそうなら、それは良いアプローチでしょうか - イベントハンドラーをページ上の多くのインスタンスにアタッチするのはオーバーヘッドですよね?

それとも、イベント委任を利用していますか?たとえば、ハンドラーはe.target equalTo className、クリックイベントを利用して実行する共通の親にバインドされるため、ハンドラーは1つのDOM要素のみにバインドされますか?

理解を助けてください。ありがとう。


もう1つの疑い。すべての dom 要素にイベントをアタッチすると、オーバーロードはどこで有効になりますか? 実行中にブラウザーに余分な負荷がかかりますか、それとも dom が重くなりますか (つまり、dom の解析が難しくなります)?

4

2 に答える 2

4

それは確かにあなたのコールバックをそれらの要素のすべてにバインドします。セレクターに一致する要素が多数ある場合は、イベント委任を使用する方が確実に優れています。

ただし、手動でいじる必要はありませんe.target。jQuery には、.on()このシナリオ専用のオーバーロードされたメソッドがあります。

$('#parent').on('click', '.children', function (){});

イベント ハンドラーは常に可能な限り最も近い親にアタッチして、イベント リスナーの影響を受ける要素の量を最小限に抑える必要があります。

于 2013-09-03T17:20:01.787 に答える
0

$('.className').bind('click',function(){})DOM内の利用可能な各要素にイベントハンドラーをアタッチします...イベントの委任には、ターゲット要素内のイベントのみをリッスンする代わりに、委任された親内で発生するすべてのクリックイベントを再度評価する必要があるなどの問題もあります。委任先セレクター...

そうは言っても、要素がたくさんある場合はイベント委譲を好みます....しかし、ハンドラーをbodyまたはにバインドするのではなく、最も直接的な共通の祖先要素にハンドラーをアタッチすることを好みますdocument

于 2013-09-03T17:20:27.663 に答える