事件委托也叫事件代理,在jQuery中叫事件委派。
事件委托的原理:(面试经常问)
不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。
事件委托的作用:
只操作了一次dom,提高程序的性能
body部分
<ul>
<li>更上一层楼</li>
<li>更上一层楼</li>
<li>更上一层楼</li>
</ul>
script部分
<script>
// 事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点
var ul = document.querySelector('ul');
ul.addEventListener('click',function(e){
e.target.style.backgroundColor = 'tomato';
})
</script>
效果:
扩展:
只要可行,就应该考虑只给 document 添加一个事件处理程序,通过它处理页面中所有某种类型的事件。相对于之前的技术,事件委托具有如下优点。
-
document 对象随时可用,任何时候都可以给它添加事件处理程序(不用等待 DOMContentLoaded或 load 事件)。这意味着只要页面渲染出可点击的元素,就可以无延迟地起作用。
-
节省花在设置页面事件处理程序上的时间。只指定一个事件处理程序既可以节省 DOM 引用,也可以节省时间。
-
减少整个页面所需的内存,提升整体性能。
-
最适合使用事件委托的事件包括:click、mousedown、mouseup、keydown 和 keypress。