在香草js中做事件代理的最佳方式(最快/最合適)時尚是什麼?香草JavaScript事件代表
例如,如果我有這個jQuery中:
$('#main').on('click', '.focused', function(){
settingsPanel();
});
如何翻譯,爲香草JS?也許.addEventListener()
我能想到這樣做的方式是:
document.getElementById('main').addEventListener('click', dothis);
function dothis(){
// now in jQuery
$(this).children().each(function(){
if($(this).is('.focused') settingsPanel();
});
}
但似乎效率不高,特別是如果#main
有許多兒童。
這是做到這一點的正確方法嗎?
document.getElementById('main').addEventListener('click', doThis);
function doThis(event){
if($(event.target).is('.focused') || $(event.target).parents().is('.focused') settingsPanel();
}
從'event.target'開始,查看它是否與選擇器匹配,如果是,則調用該函數。然後遍歷它的祖先,並且一直到這個'this'元素。你可以使用'node.matchesSelector()'來做測試,儘管在某些瀏覽器中它是用一個特定於瀏覽器的標誌來實現的,所以你需要將它包裝在一個函數中,或者把標記方法放在Element上。 prototype.matchesSelector' –
建議你發佈這個答案。 –
@EvanTrimboli:我不喜歡發佈答案。我會讓其他人得到代表。如果你願意,請隨意。 –