使用事件代理来优化dom事件的绑定

本文介绍了一种JavaScript中的事件处理技巧——事件代理。通过将事件监听器绑定到父元素而非每个子元素,可以显著提高大型DOM结构的性能。文章通过具体实例展示了如何使用原生JavaScript和jQuery实现事件代理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件代理(Event Delegation),又称之为事件委托。是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。

我们有下面的一个场景:当点击li输出相应的值

1
2
3
4
5
6
7
<ul class="list-item">
<li class="item">1</li>
<li class="item">2</li>
<li class="item">3</li>
<li class="item">4</li>
</ul>

我们可以这样写

1
2
3
4
5
6
7
8
var itemDom = document.getElementByClass("item")
for(var i=0, l = itemDom.length; i < l; i++){
this.addEventListener("click",function{
//TODO
});
}

其实这里面就有一个问题,如果li少的话都还行,如果有成千上万条的话就非常的占用性能

我们根据dom的冒泡性质可以这样修改,将事件绑定在ul上,并通过e.target去处理目标节点

1
2
3
4
5
6
7
8
9
10
11
12
13
document.getElementsByClassName("list-item")[0].addEventListener("click",function(e) {
// 检查事件源e.targe是否为Li
if(e.target && e.target.nodeName == "LI") {
console.log(e.target.innerText)
}
});
//juqery
$('.list-item').on('click', '.item', function() {
alert($(this).text())
})

在ie下面我们要使用e.srcElement来获取事件源,srcElement.tagName能够捕获活动标记名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值