前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!

DOM变动事件

  变动事件(MutationEvent)能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用 DOM2 级事件处理程序,且由于浏览器兼容性不好,所以用的不广泛;

删除节点变动

  删除节点时,涉及到 DOMNodeRemoved、DOMNodeRemovedFromDocument 和 DOMSubtreeModified 这三个事件;事件触发的先后顺序是 DOMNodeRemoved 事件、DOMNodeRemovedFromDocument 事件和 DOMSubtreeModified 事件,下面将详细介绍;

  在使用 removeChild() 或 replacechild() 从DOM中删除节点时,会触发 DOMNodeRemoved 事件。而 event.relatedNode 属性中包含着对目标节点父节点的引用。在这个事件触发时,节点尚未从其父节点删除,因此其 parentNode 属性仍然指向父节点。该事件会冒泡;IE8及以下浏览器不支持;

  1. <div id="wrapper" style="height: 50px; width: 100px;">
  2. <div id="test">1</div>
  3. </div>
  4. <div id="btn">删除子节点</div>
  5. <script type="text/javascript">
  6. var oWrapper = document.getElementById("wrapper");
  7. var oTest = document.getElementById("test");
  8. var oBtn = document.getElementById("btn");
  9.  
  10. oTest.addEventListener("DOMNodeRemoved",function(ev){
  11. ev = ev || event;
  12. console.log(ev.target.innerHTML);
  13.          ev.relatedNode.style.backgroundColor = 'red';
  14. // this.parentNode.style.backgroundColor = 'red';
  15. })
  16.  
  17. oBtn.onclick = function(){
  18. oWrapper.removeChild(oTest);
  19. }
  20. </script>

  如果被移除的节点包含子节点,那么在其所有子节点以及这个被移除的节点上会相继触发 DOMNodeRemovedFromDocument 事件,这个事件不会冒泡,目标 target 指向被移除的节点;该事件只有 chrome/safari/opera 浏览器支持;

  1. <div id="wrapper" style="height: 50px; width: 100px;">
  2. <div id="test">1</div>
  3. </div>
  4. <div id="btn">删除子节点</div>
  5. <script type="text/javascript">
  6. var oWrapper = document.getElementById("wrapper");
  7. var oTest = document.getElementById("test");
  8. var oBtn = document.getElementById("btn");
  9.  
  10. oTest.addEventListener("DOMNodeRemovedFromDocument",function(ev){
  11. ev = ev || event;
  12. console.log(ev.target.innerHTML);
  13. // this.parentNode.style.backgroundColor = 'green';
  14. })
  15.  
  16. oBtn.onclick = function(){
  17. oWrapper.removeChild(oTest);
  18. }
  19. </script>

  在DOM结构中发生任何变化时都会触发 DOMSubtreeModified 事件,该事件在其他任何事件触发后都会触发,该事件的目标是被移除节点的父节点;IE8及以下浏览器不支持;

  1. <div id="wrapper" style="height: 50px; width: 100px;">
  2. <div id="test">1</div>
  3. </div>
  4. <div id="btn">删除子节点</div>
  5. <script type="text/javascript">
  6. var oWrapper = document.getElementById("wrapper");
  7. var oTest = document.getElementById("test");
  8. var oBtn = document.getElementById("btn");
  9.  
  10. oWrapper.addEventListener("DOMSubtreeModified",function(ev){
  11. ev = ev || event;
  12. console.log(ev.type);//DOMSubtreeModified
  13. // this.style.backgroundColor = 'pink';
  14. })
  15.  
  16. oBtn.onclick = function(){
  17. oWrapper.removeChild(oTest);
  18. }
  19. </script>

插入节点变动

  插入节点时涉及到 DOMNodeInserted 事件、DOMNodeInsertedIntoDocument 事件及 DOMSubtreeModified 事件,事件触发的先后顺序是 DOMNodeInserted 事件、DOMNodeInsertedIntoDocument 事件和 DOMSubtreeModified 事件,下面将详细介绍;

  在使用 appendChild()、replaceChild() 或 insertBefore() 向DOM中插入节点时,首先触发 DOMNodeInserted 事件;这个事件的目标是被插入的节点,而 event.relatedNode 属性中包含一个对父节点的引用;在这个事件触发时,节点已经被插入到了新的父节点中。这个事件是冒泡的,因此可以在DOM的各个层次上处理它;IE8及以下浏览器不支持;

  1. <div id="wrapper" style="height: 50px; width: 100px;">
  2. </div>
  3. <div id="btn">添加子节点</div>
  4. <div id="test">1111111</div>
  5. <script type="text/javascript">
  6. var oWrapper = document.getElementById("wrapper");
  7. var oTest = document.getElementById("test");
  8. var oBtn = document.getElementById("btn");
  9.  
  10. oTest.addEventListener("DOMNodeInserted",function(ev){
  11. ev = ev || event;
  12. ev.relatedNode.style.backgroundColor = 'pink';
  13. // this.parentNode.style.backgroundColor = 'pink';
  14. })
  15.  
  16. oBtn.onclick = function(){
  17. oWrapper.appendChild(oTest);
  18. }
  19. </script>

  在新插入的节点上面会触发 DOMNodeInsertedIntoDocument 事件。这个事件不冒泡,因此必须在插入节点之前为它添加这个事件处理程序。这个事件的目标是被插入的节点;该事件只有chrome/safari/opera浏览器支持;

  1. <div id="wrapper" style="height: 50px; width: 100px;">
  2. </div>
  3. <div id="btn">添加子节点</div>
  4. <div id="test">1111111</div>
  5. <script type="text/javascript">
  6. var oWrapper = document.getElementById("wrapper");
  7. var oTest = document.getElementById("test");
  8. var oBtn = document.getElementById("btn");
  9.  
  10. oTest.addEventListener("DOMNodeInsertedIntoDocument",function(ev){
  11. ev = ev || event;
  12. this.style.backgroundColor = 'greenyellow';
  13. })
  14.  
  15. oBtn.onclick = function(){
  16. oWrapper.appendChild(oTest);
  17. }
  18. </script>

特性节点变动

  当特性被修改后,DOMAttrmodified 事件被触发;该事件只有 firefox 和 IE8及以上浏览器支持;

  1. <div id="test" style="height: 50px; width: 100px;"></div>
  2. <div id="btn">特性节点测试</div>
  3. <script type="text/javascript">
  4. var oTest = document.getElementById("test");
  5. var oBtn = document.getElementById("btn");
  6.  
  7. oTest.addEventListener("DOMAttrModified",function(ev){
  8. ev = ev || event;
  9. this.style.backgroundColor = 'greenyellow';
  10. })
  11.  
  12. oBtn.onclick = function(){
  13. oTest.setAttribute('title','123');
  14. }
  15. </script>

文本节点变动

  当文本节点的值发生变化时,触发 DOMCharacterDataModified 事件;该方法只有 chrome/safari/opera 浏览器支持;

  1. <div id="test" style="height: 50px; width: 100px;">hello</div>
  2. <div id="btn">特性节点测试</div>
  3. <script type="text/javascript">
  4. var oTest = document.getElementById("test");
  5. var oBtn = document.getElementById("btn");
  6.  
  7. oTest.addEventListener("DOMCharacterDataModified",function(ev){
  8. ev = ev || event;
  9. this.style.backgroundColor = 'greenyellow';
  10. })
  11.  
  12. oBtn.onclick = function(){
  13. oTest.innerHTML = 'hello world';
  14. }
  15. </script>

jacascript DOM变动事件的更多相关文章

  1. 深入理解DOM事件类型系列第三篇——变动事件

    × 目录 [1]删除节点 [2]插入节点 [3]特性节点[4]文本节点 前面的话 变动(mutation)事件能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用DOM2级事件处理 ...

  2. JavaScript 事件——“事件类型”中“复合事件”和“变动事件”的注意要点(转)

    复合事件 复合事件是DOM3级事件中心添加的一类事件,用于处理IME的输入序列. compositionstart.compositionupdate.compositionend 复合事件有以下三中 ...

  3. Javascript高级编程学习笔记(66)—— 事件(10)变动事件

    变动事件 DOM2级的变动事件,能在DOM中的一部分发生变化时给出提示 变动事件是为XML或HTML DOM 设计的,并不特定于某种语言 DOM2级定义了如下变动事件: DOMSubtreeModif ...

  4. javaScript事件(八)事件类型之变动事件

    DOM2级的变动(mutation)事件能在DOM中某一部分发送变化时给出提示.变动事件为XML或HTML DOM设计的,并不特定于某种语言.DOM2级定义了如下变动事件. DOMSubtreeMod ...

  5. 变动事件_DOM2级的变动事件(mutation)

    DOM2级定义了如下变动事件: DOMSubtreeModified:在DOM结构中发生任何变化时触发.这个事件在其他任何事件触发后都会触发. DOMNodeInserted:在一个节点作为子节点被插 ...

  6. JavaScript 变动事件

    变动事件,当用户修改了DOM结构(添加或删除元素节点)后发生. 任何时候当元素被添加到DOM中或从DOM中移除时,DOM的结构就发生了变化,而这种变化就会触动变动事件. 1 <html> ...

  7. jquery技巧之让任何组件都支持类似DOM的事件管理

    本文介绍一个jquery的小技巧,能让任意组件对象都能支持类似DOM的事件管理,也就是说除了派发事件,添加或删除事件监听器,还能支持事件冒泡,阻止事件默认行为等等.在jquery的帮助下,使用这个方法 ...

  8. 关于动态生成dom绑定事件失效的原因

    之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试 ...

  9. javascript 原生方法监听DOM结构改变事件

    js原生方法监听DOM结构改变事件 document.addEventListener('DOMNodeInserted',function(){alert(1)},false);document.a ...

随机推荐

  1. shell 文本操作命令

    vi 编辑器中有三种状态模式  [vi 文件名(或路径+文件名)] 1.命令模式 2.输入模式 3.末行模式 三种模式间的相互转换 vi编辑器的启动与退出 直接进入编辑环境 $ vi 进入编辑环境并打 ...

  2. Android Service 基础

    启动方式 startService(Intent) 这种方式启动的Service可以在后台无限期的运行,与启动它的组件没有关系. bindService 绑定Service.它提供了一种类似C/S结构 ...

  3. Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例

    本文目录 1. Net下日志记录 2. NLog的使用     2.1 添加nuget引用NLog.Web.AspNetCore     2.2 配置文件设置     2.3 依赖配置及调用     ...

  4. SQL更新语句,Error Code: 1175. You are using safe update(在进行视图更新的时候遇到)

    转发于:http://blog.csdn.net/qq_26684469/article/details/51105188?locationNum=5&fps=1 原来的SET SQL_SAF ...

  5. 计时器setInterval()-慕课网

    计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...

  6. Python第二话 初识复杂数据类型(list、dictionary、tuple)

    上一篇我们简单认识了数据类型:数字number和字符串string,这篇我们就来隆重介绍一下重量级的数据类型:列表list.字典dictionary和元组tuple. 一.列表List: ①列表是什么 ...

  7. struct_2拦截器与过滤器

    这个为网上所剪切的知识点,仅为个人学习所用,无其他用途. 过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者 ...

  8. [BZOJ 4419][Shoi2013]发微博

    4419: [Shoi2013]发微博 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 665  Solved: 364[Submit][Status] ...

  9. python全栈学习--day3

    一.基础数据类型 基础数据类型,有7种类型,存在即合理. 1.int 整数 主要是做运算的 .比如加减乘除,幂,取余  + - * / ** %...2.bool 布尔值 判断真假以及作为条件变量3. ...

  10. CountDownLatch 源码解析—— await()

    上一篇文章说了一下CountDownLatch的使用方法.这篇文章就从源码层面说一下await() 的原理. 我们已经知道await 能够让当前线程处于阻塞状态,直到锁存器计数为零(或者线程中断). ...