jacascript DOM变动事件

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>
时间: 2024-10-12 13:56:32

jacascript DOM变动事件的相关文章

DOM的事件模拟(摘)

要确定浏览器是否支持DOM规定的HTML事件,可以使用如下代码: var isSupported = document.implementation.hasFeature("HTMLEvents", "2.0"); 只有根据DOM2级事件实现这些事件的浏览器才返回true,以非标准方式支持这些事件的浏览器会返回false; 关于document.implementation的其它方法以及它们各自的返回值,可以查看MDN上的说明>> 目前主流的浏览器(非I

变动事件

url: Window 有hashchange事件 在url发生变化时触发 dom: DOMSubtreeModified 在dom结构发生任何变化时触发,这个事件总是在其他任何事件触发之后触发 DOMNodeInserted 在一个节点作为子节点插入另一个节点时触发 DOMNodeRemoved 在一个节点从其父节点移除时触发 DOMNodeInsertedIntoDocument 在一个节点被直接插入文档或通过子树间接插入文档之后触发.这个事件在DOMNodeInserted之后触发 DOM

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

× 目录 [1]删除节点 [2]插入节点 [3]特性节点[4]文本节点 前面的话 变动(mutation)事件能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用DOM2级事件处理程序,且由于浏览器兼容性不好,所以用的不广泛 删除节点 删除节点时,涉及到DOMNodeRemoved事件.DOMNodeRemovedFromDocument事件和DOMSubtreeModified事件这三个事件,下面将详细介绍 DOMNodeRemoved 在使用removeChild()或r

浅谈-变动事件

在DOM2级中添加进来的,当在DOM中的某一部分发生变化时给出提示. 当我们在使用的时候,可以检测浏览器是否支持变动事件: var isSupported = documennt.implementation.hasFeature("MutationEvents","2.0"); 删除节点 在使用 removeChild()或 replaceChild() 从DOM中删除节点时,会一次触发如下事件 实例: 1 EventUtil.addHandler(window,

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

DOM2级的变动(mutation)事件能在DOM中某一部分发送变化时给出提示.变动事件为XML或HTML DOM设计的,并不特定于某种语言.DOM2级定义了如下变动事件. DOMSubtreeModifined:在DOM结构发生任何变化的时候.这个事件在其他事件触发后都会触发. DOMNodeInserted:当一个节点作为子节点被插入到另一个节点中时触发. DOMNodeRemoved:在节点从其父节点中移除时触发. DOMNodeInsertedIntoDocument:在一个节点被直接插

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

复合事件 复合事件是DOM3级事件中心添加的一类事件,用于处理IME的输入序列. compositionstart.compositionupdate.compositionend 复合事件有以下三中: compositionstart:要开始输入: compositionupdate:插入新字符: compositionend:复合系统关闭,返回正常键盘输入状态: event.data data属性: compositionstart访问data:正在编辑的文本: compositionupd

整理之DOM事件阶段、冒泡与捕获、事件委托、ie事件和dom模型事件、鼠标事件

整理之DOM事件阶段 本文主要解决的问题: 事件流 DOM事件流的三个阶段 先理解流的概念 在现今的JavaScript中随处可见.比如说React中的单向数据流,Node中的流,又或是今天本文所讲的DOM事件流.都是流的一种生动体现.用术语说流是对输入输出设备的抽象.以程序的角度说,流是具有方向的数据. 事件流分事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的其

HTML DOM event 事件 (丫头, 好想你了)

HTML DOM event 事件, 用用就知道了 function isKeyPressed(eventssdasd)     // 这个地方其实无关紧要,就是定义一个名称而已, 不过为了好看, 最好还是写成 event{  if (event.altKey==1)                        // event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等,此处为检测 alt 键是否按下    {  // 此处的 event 必须写正确, 你可以

2014年辛星解读Javascript之DOM之事件及其绑定

我们通过DOM的事件能够对HTML的事件作出反应.就像我们用其它编程语言写GUI一样,那么HTML包含哪些事件呢?以下是几个常见的样例,比方网页已经完毕记载,图像完毕载入,鼠标移动到元素上方.输入文字被改变.表单提交.用户点击按键等等,还是蛮多的. 以下我们用实例来演示一下,看以下的HTML代码: <html> <p id = "tag" onclick="this.innerHTML ='小倩' ">辛星</p> </ht