DOM
DOM(Document Object Model) 全称文档对象模子. 文档可所以HTML, XML, 或许XHTML文档.DOM定义 的是一组与平台和言语的接口. 现在形成了三个演进的规范, DOM Level 1
, DOM Level 2
, DOM Level 3
. 每一个新的Level都是在原有的基本之上增加了新的接口.
能够看到, 在DOM level 2
里引入了事宜, 重要有EventTarget
, Mouse
等接口. DOM level 2
里重要引入了键盘事宜.
Event事宜流
监听器 target.addEventListener(type, listener[, useCapture])
的第三个参数useCapture
, 范例为布尔, 默以为false
,示意事宜触发运用冒泡流. 先触发内层元素的监听器, 再触发外层元素的监听器. useCapture
取值为true
时, 将先触发外层元素的监听器, 再触发内层元素的监听器.
依据DOM2级事宜划定
共有三个事宜阶段:捕捉阶段、目的阶段和气泡阶段。如在 dispatch之前挪用stopPropagation()
, 则将跳过一切阶段
捕捉阶段:事宜对象经由过程目的的先人从窗口流传到目的的父对象。这个阶段也被称为捕捉阶段。
目的阶段:事宜对象(event object)抵达事宜对象的事宜目的(event target)。这个阶段也被称为at-target阶段。假如事宜范例指导事宜不冒泡,则事宜对象将在完成此阶段以后住手。
气泡阶段:事宜对象以相反递次流传目的的先人,从event target的父对象最先,并以窗口完毕。这个阶段也称为冒泡阶段。
合营代码明白. 此处我们点击的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div class="main">
<div class="btn-wrap">
<button id="btn">点击</button>
</div>
<div>
<script type="text/javascript">
var btn=document.querySelector("#btn"),
btnWrap=document.querySelector(".btn-wrap"),
main=document.querySelector(".main"),
body=document.querySelector("body"),
html=document.querySelector("html");
//冒泡
btn.addEventListener("click",function(){
console.log("你点击了ID为btn的button元素!");
},false);
btnWrap.addEventListener("click",function(){
console.log("你点击了class为btn-wrap的DIV元素!");
},false);
main.addEventListener("click",function(){
console.log("你点击了class为main的DIV元素!");
},false);
body.addEventListener("click",function(){
console.log("你点击了body元素!");
},false);
html.addEventListener("click",function(){
console.log("你点击了html元素!");
},false);
document.addEventListener("click",function(){
console.log("你点击了document对象!");
},false);
//捕捉
btn.addEventListener("click",function(){
console.log("你点击了ID为btn的button元素!");
},true);
btnWrap.addEventListener("click",function(){
console.log("你点击了class为btn-wrap的DIV元素!");
},true);
main.addEventListener("click",function(){
console.log("你点击了class为main的DIV元素!");
},true);
body.addEventListener("click",function(){
console.log("你点击了body元素!");
},true);
html.addEventListener("click",function(){
console.log("你点击了html元素!");
},true);
document.addEventListener("click",function(){
console.log("你点击了document对象!");
},true);
</script>
</body>
</html>
假如我们点击btn
,也能够视为同时点击了btn的容器元素, 以至单击了全部页面. 由于我们于每一级元素都增加了监听器, 控制台打印效果以下.
Event相干易殽杂关键词
-
eventTarget
/event.Target
能用
addEventListener
要领增加事宜监听器的对象都是eventTarget
.
Element,document 和 window 是最常见的eventTarget
.event.target
, 是触发当前事宜的最小单元元素. -
event.currentTarget
/event.Target
event.target
返回触发事宜的元素;event.currentTarget
返回绑定事宜的元素详细的说就是
event.currentTarget
是注册事宜时所指向的元素,而event.target
是相应事宜的最小子元素,也就是最深层级的触发事宜的元素。涉及到事宜托付时, 这两个所指的元素才会不一样.
参考:
https://www.cnblogs.com/johnn… DOM品级概述
https://www.w3.org/TR/DOM-Lev… W3C事宜流