私はしばしば、自分のサイト内のもの(ヘッダーメニュー、サイドバーメニュー、いくつかのボタン、いくつかのトグルなど)に一連のイベントリスナーを追加します。ページ上で操作しているイベントリスナーの全体の束になる可能性があります。多くのイベントリスナーを追加する適切な方法
は、私はいつもこの種のものの操作を行います。
// all of our menu items
var menuItems = document.querySelectorAll('.primary-nav a');
// loop over them
_.each (menuItems, function(item){
// add event listener to each
item.addEventListener('click', function(){
console.log(item);
});
});
ので、特定のサイト上で、私はブロックのこれらの種類の4-5を持っているかもしれません。これらのすべてのリスナーをそこに置く方が良いですか、ドキュメントを聴き、何らかのクラス/属性フィルタリングを採用する方が良いでしょうか?そのよう
:
document.addEventListener('click', function(e){
if (e.target.closest('li').classList.contains('primary-nav')) {
// We have a primary nav item, do something with it
}
if (e.target.closest('li').classList.contains('mobile-menu-toggle')) {
// function for toggling open the mobile menu
}
});
アドバイス大歓迎!
すべてパフォーマンスに影響します。イベントを直接追加するためにレンダリング時にヒットしたり、イベントが発生したときにイベントをフィルタリングする必要があるときにヒットしたりします。 – epascarello
jQueryを使用していませんか? – Cerbrus
'closest()'はブラウザのサポートを制限しています。 polyfillも必要でしょうか? – charlietfl