手写一个dom事件委托

730 阅读1分钟

面试的时候会问的一个问题,让手写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
}