美文网首页
谈谈 文档对象模型-DOM

谈谈 文档对象模型-DOM

作者: MrAlexLee | 来源:发表于2019-12-28 00:20 被阅读0次

DOM 事件

  • 1,DOM 事件级别

    分为3个级别
    DOM0级 对应 DOM0 级事件处理
    DOM2级 对应 DOM1 级事件处理
    DOM3级 对应 DOM2 级事件处理

    • DOM0

      DOM0 事件绑定,是最原始的事件绑定,直接在 HTML 元素上写事件 onclick ,赋值为一个函数即可。
      缺点是 HTML 与 JS 强耦合,修改函数名,那么需要找到当前对应的 HTML 元素,并且更改函数名。也不能同时绑定多个函数。

      如何实现低耦合?
      通过get HTML 元素的 id获得元素,然后直接对元素设置 onclick 属性

      优点是不需要操作 DOM 来完成事件的绑定。不存在兼容性问题

      清理 DOM 事件时,只需要给该事件赋值为 null

    • DOM2

      DOM2 级事件在 DOM0 级事件的基础上弥补了一个无法绑定多个处理函数的缺点,允许给一个处理程序添加多个处理函数。
      addeventlistener,removeeventlistener
      IE8 以下版本不支持上面两个方法,要使用 attachevent 和 detachevent

      优点:可以绑定多个处理函数,顺序执行。

      缺点:有兼容性问题

      三个参数第一个事件名,第二个是处理函数,第三个是布尔值,true 表示在捕获阶段调用,false 时表示在冒泡阶段调用。

    • DOM3

      DOM3 级事件在 DOM2 事件的基础上添加了更多的事件类型:
      UI 事件
      焦点事件
      鼠标事件
      滚轮事件
      文本事件
      键盘事件
      合成事件
      同时 DOM3 级事件也允许使用者自定义一些事件。
      举个栗子

      var eve = new Event('custome')  
      ev.addEventListem('custom',function () {  
          console.log('custome')  
      })  
      ev.dispatchEvent(eve)  
      
  • 2,DOM 事件流

    为什么有事件流?
    假如我们在一个 button 上注册了一个 click 事件,又在其父元素DIV 上注册了一个 click 事件,那么当我们点击 button 的时候,是先触发父元素 div 的事件还是 button 上的事件呢,这就需要一种约定来规范事件的执行顺序,这就是事件执行的流程。

  • 3,DOM 事件模型

    • 捕获

      事件从 window 对象自上而下向目标节点传播的阶段

      子元素和父元素上同时绑定了 click 事件,点击时会先执行父元素的处理函数,然后执行子元素的处理函数

    • 目标阶段

      真正目标节点正在处理事件的阶段

    • 冒泡

      事件从目标节点自下而上向 window 对象传播的阶段
      子元素和父元素上同时绑定了 click 事件,点击时会先执行子元素的处理函数,然后执行父元素的处理函数

  • 4,DOM 事件代理(事件委托)

    由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,油父节点的监听函数统一处理多个子元素的事件,这种方法叫做事件委托。

    应用场景:有一个列表,列表中有大量的列表项,我们需要在点击每个列表项的时候响应一个事件。

    此场景为什么要使用事件委托?

    1,函数是对象,会占用内存,内存中对象越多,浏览器性能越差,如果给每个列表项都加一个事件,对于内存消耗是非常大的,效率上也要消耗很多性能。

    2,注册的事件越多,导致 DOM 元素访问次数越多,会延迟页面交互就绪事件

    3,动态添加或者删除子元素的时候不用考虑增加或者删除绑定事件。

    举个栗子:

    <ul id="list">  
        <li>1</li>  
        <li>2</li>  
        <li>3</li>  
        <li>4</li>  
    </ul>  
    
    <script>  
    // 给父层元素绑定事件  
    document.getElementById('list').addEventListener('click', function (e) {  
        // 兼容性处理  
        var event = e || window.event;  
        var target = event.target || event.srcElement;  
        // 判断是否匹配目标元素  
        if (target.nodeName.toLocaleLowerCase() === 'li') {  
            console.log('the content is: ', target.innerHTML);  
        }  
    });  
    </script>  
    
  • 5,event 对象常见的方法和属性

    • 1,event.preventDefault()

      如果调用这个方法,默认事件行为将不再触发,如表单一点击提交按钮就刷新页面,a 标签默认页面跳转或者是锚点定位等

      举个栗子:

      <a id="test" href="http://www.google.com">链接</a>  
      <script>  
          test.onclick = function(e){  
              e = e || window.event;  
              e.preventDefault();  
          }  
      </script>  
      

      除此以外还有两种方法可以阻止 A 标签跳转

      方法 1:

      <a href="javascript:;">链接</a>  
      

      方法 2:

      <a id="test" href="http://www.google.com">链接</a>  
      <script>  
          test.onclick = function(e){  
              e = e || window.event;  
              return false;  
          }  
      </script>  
      
    • 2,event.stopPropagation() & event.stopImmediatePropagation()

      event.stopPropagation() 方法阻止事件冒泡到父元素,阻止任何父事件处理程序被执行。

      event.stopImmediatePropagation() 方法除了可以阻止向父元素冒泡以外,还可以阻止相同事件类型的其他监听器被触发。

      举个栗子:

      <button id="btn">点我试试</button>  
      <script>  
      const btn = document.querySelector('#btn');  
      btn.addEventListener('click', event => {  
        console.log('btn click 1');  
        event.stopImmediatePropagation();  
      });  
      btn.addEventListener('click', event => {  
        console.log('btn click 2');  
      });  
      document.body.addEventListener('click', () => {  
        console.log('body click');  
      });  
      </script>  
      

      上面只会打印出 btn click1

    • 4,event.target & event.currentTarget

      event.target指向引起触发事件的元素,而 event.currentTarget 则指向添加监听事件的对象

相关文章

  • DOM

    DOM Document Object Model(文档对象模型)文档对象模型 (DOM) 是HTML和XML文档...

  • 谈谈 文档对象模型-DOM

    DOM 事件 1,DOM 事件级别分为3个级别DOM0级 对应 DOM0 级事件处理DOM2级 对应 DOM1 级...

  • DOM操作

    文档对象模型 DOM DOM 是 JavaScript 操作⽹页的接口,全称为“文档对象模型”(Document ...

  • WebAPI(一)——DOM

    JS组成:ECMAScript。Dom:文档对象模型。Bom:浏览器对象模型。 DOM: 概念:文档即html文件...

  • 第一章 什么是JavaScript

    JavaScript的组成 -核心 (EcmaScript)-文档对象模型-浏览器对象模型 DOM 文档对象模型(...

  • per-courseDOM介绍

    DOM 文档对象模型 D 表示文档,DOM的物质基础O 表示对象,DOM的思想基础M 表示模型,DOM的方法基础...

  • 12.6dom

    什么是DOM DOM: Document Object Model 文档对象模型文档: html页面文档对象: h...

  • 07.JavaScript Html Dom

    DOM简介 DOM :Document Object Model 文档对象模型HTML DOM树 : DOM树模型...

  • JavaScript Dom

    文档对象模型 文档对象模型(doucment object model,dom)是表示文档(如html文档、xml...

  • DOM学习总结

    初识DOM DOM是Document Object Model,即是文档对象模型。 文档对象模型有三种节点关系。分...

网友评论

      本文标题:谈谈 文档对象模型-DOM

      本文链接:https://www.haomeiwen.com/subject/bomjoctx.html