面试的时候会问的一个问题,让手写dom的事件委托
一般情况下,写如下的:
ul.addEventListener('click',function(e){
if(e.target.tagName.toLowerCase() === 'li'){
console.log('点击了li')
}
})
而实际上要写成这样的
on:function(element,eventType,selector,fn){
element.addEventListener(eventType,e=>{
let el = e.target
while(!el.matches(selector)){
if(element === el){
el = null
break;
}
el = el.parentNode
}
el && fn.call(el,e,el)
})
return element
}