DOM0 和 DOM2 的区别
- 语法上的区别
- DOM0
绑定事件:通过ontype=function(){}[type指的是click,mousemove等]的形式绑定
box.onclick = function(){},缺点就是同一类型事件只能绑定一个一个函数,否则后边的函数会覆盖前边的函数
取消事件: box.onclick = null;
- DOM2
绑定事件: box.addEventListener('click',function(){})的形式,没有on,有点就是同一类型事件可以绑定多个触发函数,会按照绑定的顺序执行事件
取消事件 box.removeEventListener('click',function(){})
-
底层运行机制上是不同的 DOM0就是给元素的某个属性绑定方法(有效绑定只有一个) DOM2是就事件池机制完成的,每次新增一个绑定事件,就会在事件池里边放一个事件,当事件触发一次执行事件池中的事件
-
DOM2中可以给一些特殊的事件类型绑定方法,这些事件类型DOM0不支持绑定 如:DOMContentLoaded,transitionend(当css3的transition运行完成之后出发)
Jquery中的事件都是基于DOM2级别的事件来绑定的,所以jquery中的事件都可以使用多次,不会进行事件覆盖问题
DOM2的事件池机制
- 基于addEventListenr / attachEvent(IE6~8中使用)向事件池中追加方法 基于removeEventListener / dettacheEvent向事件池中移除对应事件,DOM2会根据元素和事件类型对新增的方法做重复校验,但是IE6—8不可以 发布订阅就是模拟事件池的机制
- 当事件行为触发,会把事件池中的方法按照添加的的顺序依次执行对应的函数(IE6`8中执行的顺序是不固定的)