04前端面试题-DOM事件

1,007 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

DOM是一种文档对象模型,HTLM页面别加载的时候,浏览器会创建一个DOM对象,通过js获取到这个DOM对象,就可以操作页面中的元素

一、DOM事件的级别

(一)DOM0

  • element.onclick
  • 默认使用事件冒泡

(二)DOM2

  • element.addEventListener('click',function(){},false),第三个参数默认为false
  • 默认使用事件冒泡

(三)DOM3

  • element.addEventListener('keyup',function(){},false),第三个参数默认为false
  • 相比于DOM2,新增了很多事件,默认默认使用事件冒泡

二、DOM事件模型

(一)事件流

  • 当触发灭个DOM节点的响应事件时,该事件会在当前元素节点与根节点之间按照特定顺序传播,传播过程中经过的节点都会收到该事件,这个传播过程称为DOM事件流

image.png

  • DOM2规定事件流分为三个阶段:
  1. 事件捕获阶段
  2. 处于目标阶段
  3. 事件冒泡阶段

(二)DOM事件捕获具体流程

image.png

(三)DOM事件冒泡具体流程

  • 事件冒泡是事件捕获的反向过程

三、Event对象的常见应用

  • event.prentDefault():阻止默认事件
  • event.stopPropagation():阻止冒泡,即阻止事件在DOM元素中传播
  • event.stopImmediatePropagation():阻止DOM元素相同事件的触发。当DOM元素绑定了多个相同类型的事件时,如果被触发,多个事件回按照顺序依次执行。如果绑定的某个事件使用的这个方法,那这个事件的冒泡行为会被阻止,而且该元素绑定的其他相同类型事件都会被阻止,即不执行
  • event.currentTarget:返回绑定事件的元素
  • event.target:返回触发事件的元素

四、自定义事件

(一)使用Event定义

  • 实现方法如下: image.png

(二)使用CustomEvent定义

  • 实现方法如下: image.png

五、面试题

(一)面试题一

  • 选C
  • document是一个document node,是一个节点
  • 所有的HTML elemets都是element nodes
  • 所有的comments(注释)都是document node image.png

(二)面试题二

  • 最终打印结果见下图中的控制台部分
  • 根据上文的内容,我们可以知道,元素对象mother和daughter绑定的事件在捕获阶段执行,元素对象grandma和bady绑定的事件在冒泡阶段执行
  • 然后根据事件流的传播过程,事件传播的过程为:mother->daughter->bady->grandma,这个顺序即为元素绑定事件执行的顺序 image.png