DOM:事件代理

事件代理

网页设计中的一种思想,利用事件对象中引用的目标对象这个技术来实现的

无论事件触发时 是不是目标对象的监听器 在监听器内部的事件对象event中都可以访问这个事件的目标对象,利用这个特点去绑定事件给父级元素 来代理子级元素的业务,这种设计就是事件代理。

事件代理的优点:

1.可以大量节省内存占用,减少事件注册。比如ul上代理所有li的click事件就很不错。
2.可以实现当新增子对象时,无需再对其进行事件绑定,对于动态内容部分尤为合适

 

事件代理的缺点:

1.静态的事件绑定:如果动态的添加元素进去  添加进去的元素没有这个事件
2.性能消耗更高  业务却相同
3.如果把所有事件都用事件代理,可能会出现事件误判。即本不该被触发的事件被绑定上了事件。
 

例:

<div class="box1">
        <div class="box2">hello1</div>
    <div class="box2">hello2</div>
    <div class="box2">hello3</div>
    <div class="box2">hello4</div>
</div>

 

没有事件代理需要把多个相似元素手动绑定事件:
var box1=document.querySelector(".box1")
var box2=document.createElement("div")
box2.className="box2"
box1.appendChild(box2)

 

事件代理后:
 
var box1=document.querySelector(".box1")
box1.addEventListener("click",function(e){
    console.log(e.target.innerHTML)
})

 

获取各个节点:

var box1=document.querySelector(".box1")
box1.addEventListener("click",function(e){
    console.log(e.target)//事件的目标对象
    console.log(e.srcElement)//事件的目标对象
    console.log(document.documentElement)//html元素
    console.log(document.body)//body元素
    console.log(document)//根节点
})

 

posted on 2022-07-21 14:26  香香鲲  阅读(24)  评论(0编辑  收藏  举报