jacascript DOM变动事件
2018-06-24 00:06:15来源:未知 阅读 ()
前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!
DOM变动事件
变动事件(MutationEvent)能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用 DOM2 级事件处理程序,且由于浏览器兼容性不好,所以用的不广泛;
删除节点变动
删除节点时,涉及到 DOMNodeRemoved、DOMNodeRemovedFromDocument 和 DOMSubtreeModified 这三个事件;事件触发的先后顺序是 DOMNodeRemoved 事件、DOMNodeRemovedFromDocument 事件和 DOMSubtreeModified 事件,下面将详细介绍;
在使用 removeChild() 或 replacechild() 从DOM中删除节点时,会触发 DOMNodeRemoved 事件。而 event.relatedNode 属性中包含着对目标节点父节点的引用。在这个事件触发时,节点尚未从其父节点删除,因此其 parentNode 属性仍然指向父节点。该事件会冒泡;IE8及以下浏览器不支持;
<div id="wrapper" style="height: 50px; width: 100px;"> <div id="test">1</div> </div> <div id="btn">删除子节点</div> <script type="text/javascript"> var oWrapper = document.getElementById("wrapper"); var oTest = document.getElementById("test"); var oBtn = document.getElementById("btn"); oTest.addEventListener("DOMNodeRemoved",function(ev){ ev = ev || event; console.log(ev.target.innerHTML); ev.relatedNode.style.backgroundColor = 'red'; // this.parentNode.style.backgroundColor = 'red'; }) oBtn.onclick = function(){ oWrapper.removeChild(oTest); } </script>
如果被移除的节点包含子节点,那么在其所有子节点以及这个被移除的节点上会相继触发 DOMNodeRemovedFromDocument 事件,这个事件不会冒泡,目标 target 指向被移除的节点;该事件只有 chrome/safari/opera 浏览器支持;
<div id="wrapper" style="height: 50px; width: 100px;"> <div id="test">1</div> </div> <div id="btn">删除子节点</div> <script type="text/javascript"> var oWrapper = document.getElementById("wrapper"); var oTest = document.getElementById("test"); var oBtn = document.getElementById("btn"); oTest.addEventListener("DOMNodeRemovedFromDocument",function(ev){ ev = ev || event; console.log(ev.target.innerHTML); // this.parentNode.style.backgroundColor = 'green'; }) oBtn.onclick = function(){ oWrapper.removeChild(oTest); } </script>
在DOM结构中发生任何变化时都会触发 DOMSubtreeModified 事件,该事件在其他任何事件触发后都会触发,该事件的目标是被移除节点的父节点;IE8及以下浏览器不支持;
<div id="wrapper" style="height: 50px; width: 100px;"> <div id="test">1</div> </div> <div id="btn">删除子节点</div> <script type="text/javascript"> var oWrapper = document.getElementById("wrapper"); var oTest = document.getElementById("test"); var oBtn = document.getElementById("btn"); oWrapper.addEventListener("DOMSubtreeModified",function(ev){ ev = ev || event; console.log(ev.type);//DOMSubtreeModified // this.style.backgroundColor = 'pink'; }) oBtn.onclick = function(){ oWrapper.removeChild(oTest); } </script>
插入节点变动
插入节点时涉及到 DOMNodeInserted 事件、DOMNodeInsertedIntoDocument 事件及 DOMSubtreeModified 事件,事件触发的先后顺序是 DOMNodeInserted 事件、DOMNodeInsertedIntoDocument 事件和 DOMSubtreeModified 事件,下面将详细介绍;
在使用 appendChild()、replaceChild() 或 insertBefore() 向DOM中插入节点时,首先触发 DOMNodeInserted 事件;这个事件的目标是被插入的节点,而 event.relatedNode 属性中包含一个对父节点的引用;在这个事件触发时,节点已经被插入到了新的父节点中。这个事件是冒泡的,因此可以在DOM的各个层次上处理它;IE8及以下浏览器不支持;
<div id="wrapper" style="height: 50px; width: 100px;"> </div> <div id="btn">添加子节点</div> <div id="test">1111111</div> <script type="text/javascript"> var oWrapper = document.getElementById("wrapper"); var oTest = document.getElementById("test"); var oBtn = document.getElementById("btn"); oTest.addEventListener("DOMNodeInserted",function(ev){ ev = ev || event; ev.relatedNode.style.backgroundColor = 'pink'; // this.parentNode.style.backgroundColor = 'pink'; }) oBtn.onclick = function(){ oWrapper.appendChild(oTest); } </script>
在新插入的节点上面会触发 DOMNodeInsertedIntoDocument 事件。这个事件不冒泡,因此必须在插入节点之前为它添加这个事件处理程序。这个事件的目标是被插入的节点;该事件只有chrome/safari/opera浏览器支持;
<div id="wrapper" style="height: 50px; width: 100px;"> </div> <div id="btn">添加子节点</div> <div id="test">1111111</div> <script type="text/javascript"> var oWrapper = document.getElementById("wrapper"); var oTest = document.getElementById("test"); var oBtn = document.getElementById("btn"); oTest.addEventListener("DOMNodeInsertedIntoDocument",function(ev){ ev = ev || event; this.style.backgroundColor = 'greenyellow'; }) oBtn.onclick = function(){ oWrapper.appendChild(oTest); } </script>
特性节点变动
当特性被修改后,DOMAttrmodified 事件被触发;该事件只有 firefox 和 IE8及以上浏览器支持;
<div id="test" style="height: 50px; width: 100px;"></div> <div id="btn">特性节点测试</div> <script type="text/javascript"> var oTest = document.getElementById("test"); var oBtn = document.getElementById("btn"); oTest.addEventListener("DOMAttrModified",function(ev){ ev = ev || event; this.style.backgroundColor = 'greenyellow'; }) oBtn.onclick = function(){ oTest.setAttribute('title','123'); } </script>
文本节点变动
当文本节点的值发生变化时,触发 DOMCharacterDataModified 事件;该方法只有 chrome/safari/opera 浏览器支持;
<div id="test" style="height: 50px; width: 100px;">hello</div> <div id="btn">特性节点测试</div> <script type="text/javascript"> var oTest = document.getElementById("test"); var oBtn = document.getElementById("btn"); oTest.addEventListener("DOMCharacterDataModified",function(ev){ ev = ev || event; this.style.backgroundColor = 'greenyellow'; }) oBtn.onclick = function(){ oTest.innerHTML = 'hello world'; } </script>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:js 判断数据类型的几种方法
- Js操作DOM元素及获取浏览器高宽的简单方法 2019-12-31
- javascript IE中的DOM ready应用技巧 2019-11-17
- Document 对象的常用方法 2019-08-29
- IE DOM实现存在的部分问题及解决方法 2019-08-29
- 关于JavaScript 基础总结 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash