原文网址:JS–DOM0, DOM1, DOM2, DOM3事件的区别与详解_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍JavaScript中DOM0, DOM1, DOM2, DOM3事件级别的含义及区别。
DOM介绍
DOM(Document Object Model,文档对象模型)是针对HTML文档和XML文档的一个API。DOM描绘了一个层次化的节点树,允许开发人员添加、移出和修改页面的某一部分。
DOM脱胎于Netscape及微软公司创始的DHTML(动态HTML)。现在它已经成为表现和操作页面标记的真正跨平台、语言中立的方式。
DOM0
简介
其实并没有一种标准叫“DOMLevel 0”,这只是DOM历史中的一个参照点。
Netscape Navigator 4和IE4分别发布于1997年的6月和10月发布的DHTML,它们是未形成标准的试验性质的初级阶段的DOM,这个DOM被公认为是DOM0。
DOM0的事件的特点:
- 效率高
- 兼容所有浏览器
- 同一个元素的同一种事件只能绑定一个函数(后面的函数会覆盖前边的函数)
事件
写法
写法1:标签
<input type="button" onclick="alert(0);" />
写法2:JS
<script>
var btn = document.getElementsByClassName('button');
btn.onclick = function(){
alert(0);
}
</script>
清理dom0的事件
只需给该事件赋值为 null
<script>
var btn = document.getElementsByClassName('button');
btn.onclick = null;
</script>
DOM1
简介
官网
Document Object Model (DOM) Level 1 Specification
简介
大家熟知的Node,document, document.createElement都是在DOM1级别定义的。
1998年 10月DOM1级规范成为W3C的推荐标准,为基本的文档结构及查询提供了接口,专注于HTML文档和XML文档。
在DOM1中,DOM由两个模块组成:DOM Core(DOM核心)和DOM HTML。其中,DOM Core规定了基于XML的文档结构标准,通过这个标准简化了对文档中任意部分的访问和操作。DOM HTML则在DOM核心的基础上加以扩展,添加了针对HTML的对象和方法,如:JavaScript中的Document对象。
每个节点都有nodeType属性,表示该节点的类型。
NodeType常量 | NodeType常量值 | 说明 |
Node.ELEMENT_NODE | 1 | 我们常量的div,san,input等等 |
Node.ATTRIBUTE_NODE | 2 | 属性。 |
Node.TEXT_NODE | 3 | 包含按字面解释的纯文本,也可能包含转义后的HTML字符 |
Node.CDATA_SECTION_NODE | 4 | CDATA区块 |
Node.ENTITY_REFERENCE_NODE | 5 | 在 DOM4 规范中被移除 |
Node.ENTITY_NODE | 6 | 在 DOM4 规范里被移除 |
Node.PROCESSING_INSTRUCTION_NODE | 7 | 用于XML文档的 ProcessingInstruction (en-US) ,例如 <?xml-stylesheet … ?> 声明 |
Node.COMMENT_NODE | 8 | 注释 |
Node.DOCUMENT_NODE | 9 | 表示整个HTML页面 |
Node.DOCUMENT_TYPE_NODE | 10 | 文档类型(doctype)信息。 |
Node.DOCUMENT_FRAGMENT_NODE | 11 | 文档片段。性能优化常用。 |
Node.NOTATION_NODE | 12 | 在 DOM4 规范中被移除 |
事件
DOM1一般只有设计规范没有具体实现。
DOM2
简介
项 | 说明 | 官网 |
DOM2级核心(DOMLevel2 Core) | 为节点添加了更多方法和属性。 例如 importNode, createElementNS, createAttributeNS, getElementsByTagNameNS getElementById等等 | DOM-Level-2-Core Overview , DOM-Level-2-CoreDOM-Level-2-Core Changes |
DOM2级视图 (DOM Level2 Views) | 为文档定义了基于样式信息的不同视图。 常用的就是document.defaultView,其返回文档所在的Window。 | Document Object Model (DOM) Level 2 ViewsSpecification |
DOM2 级事件 (DOM Level2 Events) | 说明了如何使用事件与 DOM文档交互。 常用的是 addEventListner, 基于EventTarget的整个事件系统都是DOM2定义的。 | Document Object Model (DOM) Level 2 EventsSpecification |
DOM2级样式 (DOM Level 2 Style) | 定义了如何以编程方式来访问和改变 CSS 样式信息。 比如常见 CSSStyleDeclaration 和CSSStyleSheet。 document.body.style返回的就是CSSStyleDeclaration. | Document Object Model (DOM) Level 2 StyleSpecification |
DOM2级遍历和范围(DOM Level2Traversal and Range) | 引入了遍历 DOM文档和选择其特定部分的新接口。 比如: createTreeWalker 与 createNodeIterator 这两个节点遍历方法 | Document Object Model (DOM) Level 2 Traversal and RangeSpecification |
DOM2级HTML(DOMLevel2HTML) | 扩展了 DOM Level 2 Core API [ DOM Level 2 Core ] ,以描述特定于 HTML 文档[ HTML 4.01]和 XHTML 文档[ XHTML 1.0]的对象和方法。 HTMLOptionsCollection就是新增的,就是<option>节点的集合。DOMImplementation 接口的 hasFeature也是。 | Document Object Model (DOM) Level 2 HTMLSpecification |
事件
说明
- 绑定事件:addEventListener(event, function, useCapture)
- 清除事件:removeEventListener(event, function, useCapture)
- 同一个元素的同种事件可以绑定多个函数,按照绑定顺序执行
IE下的DOM2事件通过attachEvent绑定和 detachEvent 进行移除事件,他们接收的参数都一样。事件执行过程以及写法有所不同。IE9及之后的版本都能兼容 addEventListener了。
addEvenetListener()、removeEventListener() 有三个参数:
第一个参数:事件名(如click, IE是 onclick);
第二个参数:事件处理程序函数;
第三个参数:true则表示在捕获阶段调用,false表示在冒泡阶段调用。
示例
<div id="box">点我</div>
<script>
var box = document.getElementById('box');
box.addEventListener('click', fun1, false);
box.addEventListener('click', fun2, false);
function fun1() {
console.log('方法1');
}
function fun2() {
console.log('方法2');
}
// 执行方法1
// 执行方法2
box.removeEventListener('click', fun2, false);
</script>
DOM3
简介
在DOM3中引入了以下模块:
- DOM加载和保存模块(DOM Load and Save):引入了以统一方式加载和保存文档的方法
- DOM验证模块(DOM Validation):定义了验证文档的方法
- DOM核心的扩展(DOM Style):支持XML 1.0规范,涉及XML Infoset、XPath和XML Base
另外,DOM3级事件在DOM2级事件的基础上添加了更多的事件类型
事件
DOM3级事件在DOM2级事件的基础上添加了更多的事件类型。
DOM3级也允许开发人员自定义事件。
DOM3级事件添加的事件类型如下:
事件类型 | 说明 | 举例 |
UI事件 | 当用户与页面上的元素交互时触发 | load、scroll |
焦点事件 | 当元素获得或失去焦点时触发 | blur、focus |
鼠标事件 | 当用户通过鼠标在页面执行操作时触发 | dbclick、mouseup |
滚轮事件 | 当使用鼠标滚轮或类似设备时触发 | mousewheel |
文本事件 | 当在文档中输入文本时触发 | textInput |
键盘事件 | 当用户通过键盘在页面上执行操作时触发 | keydown、keypress |
合成事件 | 当为IME(输入法编辑器)输入字符时触发 | compositionstart |
变动事件 | 当底层DOM结构发生变化时触发 | DOMsubtreeModified |
DOM4
2015年11月19日, DOM4发布,详情可参见:W3C DOM4
DOM4增加了 Mutation Observers ,作为原来 Mutation Events的替代。