2

ページに動的に追加される要素へのバインド解除およびバインドイベントハンドラーを処理するjQueryコードがあります。このコードには、指定されたIDプレフィックスを持つ要素から既存のハンドラーをバインド解除し、イベントハンドラーをバインドして、既存の要素にハンドラーがあり、同じIDプレフィックスの新しく追加された要素にもハンドラーが含まれるようにするラッパー関数があります。明らかに、これは、新しい要素が追加されたときにすでに存在するidプレフィックスを持つ要素に対して追加のバインド解除/バインドを行います。バインド解除は、既存の要素に同じタイプの複数のハンドラーが割り当てられるのを防ぐために行われます。

このコードを最初に書いたときから、私はjQueryデリゲート関数について学びました。これは、essentialが上記で行ったことを正確に実行しているようです。

デリゲート関数は、現在の作業コードを書き直してそれを利用する価値があるように、私が行ったことを大幅に改善しますか?より良いとは、パフォーマンス、メモリ使用量、またはその他の測定値を意味します。

4

1 に答える 1

1

を使用する場合.delegate()、指定された子孫のイベントのリスナーとなる祖先要素を選択する必要があります。子孫ツリーに追加または削除された有効なターゲットの数に関係なく、ページ上で多かれ少なかれ「永続的」である必要があるリスナーを最初からバインドしているため、これは素晴らしいことです。

これは、動的なページよりも確実に優れており、追加または削除される.click一連の要素.bindとon 要素を使用するよりも優れています。.unbind

.bind()ただし、指定された子孫のクリックをリッスンする先祖要素を選択する方法で使用することと同じかもしれません。私は.bind()、パフォーマンス上の利点について確実に言うには十分に精通していません。

--

あなたの質問に特に関係のない余談.live()ですが、これは よりもパフォーマンスの高い関数であるため、使用したくなる場合は、より良いオプションとして.live()強くお勧めします。.delegate()

于 2011-10-06T18:15:39.037 に答える