• --事件代理--


    事件代理:事件代理:网页设计中一种设计思想,利用事件对象中引用的目标对象这个技术来实现的;无论事件触发时,是不是目标对象的监听器,在监听器内部的事件对象event中都可以访问这个时间的对象,利用这个特点去绑定事件给父元素,来代理子元素的业务,这种设计就是时间代理。

    用在相同的绑定事件上。

    举例:

    <body>

        <div class="box">

            <div class="box2">hello1div>

            <div class="box2">hello2div>

            <div class="box2">hello3div>

            <div class="box2">hello4div>

        div>

        <script>

            var box2s=document.querySelectorAll(".box2")

            box2s.forEach(function(el){

                el.onclick=function(){

                    console.log(el.innerHTML)

                }

            })

        script>

    //点击谁就打印谁的innerHTML

    这样的设计缺点:

    1. 静态的事件绑定:如果动态的添加元素进去,添加进去的元素没有这个事件
    2. 性能消耗更高,但是业务却相同。

    再上述功能下再加上点击按钮实现元素的添加,点击元素打印其内容

        <div class="box">

            <div class="box2">hello1div>

            <div class="box2">hello2div>

            <div class="box2">hello3div>

            <div class="box2">hello4div>

        div>

        <button>点击添加一个hellobutton>

        <script>

            var box2s = document.querySelectorAll(".box2")

            box2s.forEach(function (el) {

                el.onclick = function () {

                    console.log(el.innerHTML)

                }

            })

            var btn=document.querySelector("button")

            btn.onclick=function(){

           

            function load1() {

                var box = document.querySelectorAll(".box")

                var box2 = document.createElement("div")

                box2.innerHTML = "hello5"

                box2.className = "box2"

                box.appenChild(box2)

            }

        }

    但是这样虽然能添加一个新的元素但是还是不能实现点击新的元素打印其内容,而且每次运行代码时,会生成若干个点击事件,造成资源浪费。这是我们就可以使用时间代理来优化。

     

    我们给父元素添加一个点击事件,找出事件对象,打印其innnerHTML的值就可以了

            var box1 = document.querySelectorAll(".box")

            box1.addEventListener("click", function (el) {

                //el是每个事件本身

                //el.target就是元素本身

                console.log(el.target.innerHTML)

            })

    这样就可以利用几行代码实现上面若干行代码的功能,而且也不会造成资源浪费

     

     

  • 相关阅读:
    云计算技术大数据概述及其知识点
    【C++】智能指针:auto_ptr、unique_ptr、share_ptr、weak_ptr(技术介绍 + 代码实现)(待更新)
    KR万能公式
    java计算机毕业设计ssm+vue高校人事管理系统
    浅谈多回路电表在荷兰光伏系统配电项目中的应用
    JavaWeb中,web应用的上下文路径解读
    如何打造一支专业的QA团队,至少要关注这5点
    Git版本控制管理——分支
    Gin框架源码解析
    c++23中的新功能之十八新增的属性
  • 原文地址:https://blog.csdn.net/cjx177187/article/details/125906285