ホームページ >ウェブフロントエンド >jsチュートリアル >「closest()」を使用したイベント委任はバニラ JavaScript イベント処理をどのように最適化できますか?

「closest()」を使用したイベント委任はバニラ JavaScript イベント処理をどのように最適化できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-29 13:04:11557ブラウズ

How Can Event Delegation with `closest()` Optimize Vanilla JavaScript Event Handling?

バニラ JavaScript イベント委任: 効率的で適切なアプローチ

イベント委任は、イベント リスナーをアタッチできる JavaScript の一般的な手法です。単一の親要素とその子要素にイベント処理を委任します。このアプローチにより、個々の子に対する冗長なイベント リスナーの作成が回避され、パフォーマンスが大幅に向上します。

バニラ JavaScript でイベント委任を実装する一般的な方法の 1 つは、addEventListener() メソッドを使用することです。ただし、質問で言及されている実装は、#main のすべての子を走査することを伴うため、パフォーマンスが最適ではありません。

より効率的な代替方法は、クリックされた要素が存在するかどうかをチェックする close() メソッドを利用することです。指定されたセレクターに一致する親要素があります。これにより、イベントをより正確かつ効率的に委任できるようになります。

たとえば、closest() を使用して jQuery イベント ハンドラーをバニラ JavaScript に変換するには、

document.querySelector('#main').addEventListener('click', (e) => {
  if (e.target.closest('#main .focused')) {
    settingsPanel();
  }
});

このコードでは、最初に選択します。 #main 要素を追加し、「click」イベントのイベント リスナーを追加します。クリックが発生すると、closest() を使用して、クリックされた要素に '.focused' クラスの親要素があるかどうかを確認します。存在する場合は、settingsPanel() 関数を呼び出します。

このアプローチは、必要な要素のみをチェックし、#main のすべての子を反復処理する必要がないため、効率的です。さらに、ターゲット要素を直接参照することで、脆弱な依存関係を軽減します。

深くネストされた構造を操作する場合、内部セレクターが親要素にならないようにすることで、パフォーマンスをさらに最適化できます。このアプローチに関するライブ デモと追加の詳細は、指定された参考資料に記載されています。

以上が「closest()」を使用したイベント委任はバニラ JavaScript イベント処理をどのように最適化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。