变动事件

DOM2级的变动事件,能在DOM中的一部分发生变化时给出提示

变动事件是为XML或HTML DOM 设计的,并不特定于某种语言

DOM2级定义了如下变动事件:

  • DOMSubtreeModified:在DOM结构发生变化时触发,即会在下面所有事件触发后触发
  • DOMNodeInserted:当一个节点作为子节点插入另一个节点中时触发
  • DOMNodeRemoved:节点从父节点中移除时触发
  • DOMNodeInsertedIntoDocument:一个节点被直接插入文档或通过子树间接插入文档后触发,在DOMNodeInserted 事件之后触发
  • DOMNodeRemovedFromDocument:一个节点直接从文档移除,或通过子树间接从文档移除触发,在DOMNodeRemoved 事件之后触发
  • DOMAttrModified:特性被修改之后触发
  • DomCharacterDataModified:在文本节点的值发生变化时触发

可以使用以下代码判断浏览器对变动事件的支持性:

var isSupported = document.implementation.hasFeature("MutationEvents","2.0");

由于DOM3作废了其中的部分变动事件,所以下面只介绍仍被支持的事件

删除节点

当我们使用 removeChild() 或 replace Child()从DOM中删除节点时

首先会触发 DOMNodeRemoved 事件

在这个事件的 event 事件对象中

event.target 是被删除的节点

event.relatedNode 则是对目标节点的父节点的引用

在该事件触发时,目标节点还尚未从其父节点移除,因此这时其 paerentNode 仍指向其父节点

该事件会冒泡因此可以在DOM的任何层次上处理它

此后在目标节点即其子节点(如果有的话)会相继触发 DOMNodeRemovedFromDocument 事件,该事件不会冒泡,所以只能在事件流的处于目标阶段进行处理

此外该事件的 event 对象不包含其它信息如:不包括relatedNode

然后触发 DOMSubtreeModified 事件,事件的目标元素是被移除元素的父节点

此时的事件对象也不会提供额外的信息,如:relatedNode

插入节点

在使用 append Child()replaceChild()或者insertBefore()向DOM中插入节点时

首先会触发 DOMNodeInserted 事件

该事件的目标是被插入的节点

同样地,event.relatedNode 指向目标节点的父节点

当该事件触发时 目标元素已经插入到了新的父节点中 ,该事件是冒泡的,同样可以在DOM的各个层次上对其进行处理

此后会触发 DOMNodeInsertedIntoDocument 事件,该事件不冒泡

所以需要在插入之前为目标元素添加该事件的事件处理程序

最后一个触发的事件是 DOMSubtreeModified,在插入后的插入节点的父节点上触发

Javascript高级编程学习笔记(66)—— 事件(10)变动事件的更多相关文章

  1. Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟

    事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...

  2. Javascript高级编程学习笔记(72)—— 模拟事件(2)IE事件模拟

    IE中的事件模拟 低版本的IE浏览器作为前端开发的一股清流,想避过都不行 虽然低版本IE正在逐步被市场淘汰,不得不承认IE8以下的浏览器依然占了不小的份额 所以这里大概介绍IE8以下的低版本IE中的事 ...

  3. Javascript高级编程学习笔记(57)—— 事件(1)事件流

    事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...

  4. Javascript高级编程学习笔记(70)—— 事件(14)内存和性能

    由于事件处理程序是现代的web程序交互能力的提供者 所以在日常实践中,我们免不了要向页面中添加大量的事件处理程序(不管是用于用户交互还是用于统计用户数据) 在创建GUI(图形用户界面)的语言(如C#) ...

  5. Javascript高级编程学习笔记(69)—— 事件(13)触摸与手势事件

    触摸与手势事件 由于移动设备既没有鼠标也没有键盘,所以在为移动浏览器开发交互性网页时,常规的鼠标键盘事件根本不够用 所以早期的苹果为Safari 添加了一些与触摸相关的事件 随着后面Android的W ...

  6. Javascript高级编程学习笔记(68)—— 事件(12)设备事件

    设备事件 随着智能手机与平板电脑的普及,为了更好地让用户与这些设备进行交互 浏览器引入了一种新的方式,而一类新的事件也应运而生,这就是设备事件 W3C从2011年开始制定关于设备事件的草案 下面将会介 ...

  7. Javascript高级编程学习笔记(67)—— 事件(11)HTML5事件

    DOM规范没有涵盖所有浏览器支持的所有事件 而许多浏览器出于满足用户需求,或解决特殊问题的目的,实现了一些自定义事件 HTML5列出了浏览器应该支持的所有事件,这里只讨论得到浏览器完善支持的事件(并非 ...

  8. Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件

    键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...

  9. Javascript高级编程学习笔记(63)—— 事件(7)鼠标及滚轮事件

    鼠标与滚轮事件 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备 DOM3级事件中定义了9个鼠标事件: click:在用户单击主鼠标按钮(一般为鼠标左键)或者按下回车时触发,这一点对 ...

随机推荐

  1. Quartz.Net进阶之六:详述 JobStores

    一.介绍 今天开始学习 JobStore,别的先不说,也不用翻译软件来翻译,直接从字面意思看来理解一下.我第一眼的感觉就是 job 是任务的意思,Store 是商店的意思,连起来就是可以存储 Job ...

  2. JS继承(一)

    突然发现自己很久没写过什么东西了 其实从博客更新的速度上就可以看出一个人近期有没有成长 对 …… 我没有成长 也可以由此看出自己选择的企业是不是对的 对 …… 我不会离职…… 略略略 来咬我啊…… 于 ...

  3. Linux_软件安装_jdk_tomcat_Mysql

    双击要安装的文件(或右键传输) 1. JDK的安装1.1 准备工作:安装依赖的环境 yum install glibc.i686 yum –y install libaio.so.1 libgcc_s ...

  4. 探索未知种族之osg类生物---渲染遍历之裁剪二

    前言 上一节我们大致上过了一遍sceneView::cull()函数,通过研究,我们发现上图中的这一部分的代码才是整个cull过程的核心部分.所以今天我们来仔细的研究一下这一部分. sceneView ...

  5. ASP .NetCore 部署500错误 查看异常详情

    部署.net core 网站后,访问报错:500 按照教程设置完成,但访问时总是提示 服务器内部错误,没有详细的异常信息,无从下手. 解决办法: 1.在站点根目录下按住shift+鼠标右键,选择在此处 ...

  6. rabbit基本原理 转

    https://www.cnblogs.com/jun-ma/p/4840869.html

  7. 浅谈Java和PHP的异同

    编程范式: Java:纯面向对象的语言,有人说过:Java中一切皆对象!当然咯,人们都忘了Java的八种基本数据类型:int.double.boolean.byte.float.long.short. ...

  8. pd 注意事项

  9. list.get(0)防止NPE

    package com.chuangjin.p2p; import com.chuangjin.core.utils.JsonUtils; import java.util.ArrayList; im ...

  10. H5新特性---Web Worker---Web Stroage

    今天的目标 3.1:h5新特性八--Web Worker---代码就3行 程序:program 存储在外存(磁盘)中代码 进程:Process/Task 将程序调用内存中,分配空间 线程:Thread ...