js事件委托

整理了一些关于js事件委托的内容

事件委托又称事件代理,主要利用了js事件冒泡的性质。在父元素上绑定一个事件,对子元素操作时,事件会冒泡到父元素上被处理。

作用

1)减少对DOM的操作次数。

比如一个ul里有10个li,如果直接对li增加click事件,对DOM就是操作10次,而使用事件委托,只对ul绑定事件,对DOM操作就是1次。
DOM操作次数越多,页面交互就绪前的时间就越多,所以用事件委托可以优化页面性能。

2)减少内存占有

页面上绑定的每个函数都会占用内存,使用事件委托可以用更少的内存实现相同的功能,优化页面性能。

具体实现

刚接触事件委托时最直接的一个问题就是委托在父元素上的事件会通过父元素本身的交互触发。比如在ul上绑定了clcik事件,我只希望在点击li时触发,点击ul时不要触发,该怎么处理呢?
这里可以使用Event对象,可以显示触发当前事件的DOM,IE需要使用event.srcElement.nodeName,其它浏览器使用event.target.nodeName。

上代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul id="test">
        <li>one</li>
        <li>two</li>
        <li>three</li>
        <li>four</li>
    </ul>
    <script>
        window.onload = function(){
            let test = document.getElementById("test");
            test.onclick = function(event){
                let target = event.target || event.srcElement;
                if(target.nodeName.toLowerCase() === 'li'){
                    alert(target.innerHTML);
                }
            }
        }
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值