在香草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:我不喜欢发布答案。我会让其他人得到代表。如果你愿意,请随意。 –