JavaScript监听DOM节点变化事件

API描述浏览器兼容
DOMSubtreeModified监听元素的DOM结构发生变化IE8不支持
DOMNodeInserted监听父元素中插入子元素IE8不支持
DOMNodeRemoved监听父元素中移除子元素IE8不支持
DOMNodeInsertedIntoDocument监听元素插入文档只有chrome/safari/opera支持
DOMNodeRemovedFromDocument监听元素从文档中移除只有chrome/safari/opera支持
DOMAttrModified监听元素的属性修改只有firefox、IE8支持
DOMCharacterDataModified监听元素的文本节点变化只有chrome/safari/opera支持

DOMSubtreeModified

   <main>
    <h1 class="text">123</h1>
   </main>
   <button onclick="set()">点击</button>
   <script>
        const mainNode=document.querySelector('main');
        const h1=document.querySelector('h1');
        h1.addEventListener('DOMSubtreeModified',()=>{
            console.log(123213);
        })
        function set(){
         mainNode.removeChild(h1);
        }
   </script>

监听DOM结构变化的事件中,较为常用的就是DOMSubtreeModified;

DOMNodeInserted

   <main>
    <h1 class="text">123</h1>
   </main>
   <button onclick="set()">点击</button>
   <script>
        const mainNode=document.querySelector('main');
        const h1=document.querySelector('h1');
        mainNode.addEventListener('DOMNodeInserted',()=>{
            console.log(123213);
        })
        function set(){
            let h2=document.createElement('h2');
            h2.innerText="789";
            mainNode.appendChild(h2);
        }
   </script>

DOMNodeInserted监听的是元素的插入,属性节点的添加是监听不到的。

DOMNodeRemoved

   <main class="abc">
    <h1 class="text">123</h1>
   </main>
   <button onclick="set()">点击</button>
   <script>
        const mainNode=document.querySelector('main');
        const h1=document.querySelector('h1');
        mainNode.addEventListener('DOMNodeRemoved',()=>{
            console.log(123213);
        })
        function set(){
            mainNode.removeChild(h1);
        }
   </script>

DOMNodeRemoved监听的是元素的移除,属性节点移除是监听不到的。

DOMNodeInsertedIntoDocument

   <main class="abc">
    <h1 class="text">123</h1>
   </main>
   <button onclick="set()">点击</button>
   <script>
        const mainNode=document.querySelector('main');
        const h1=document.querySelector('h1');
        let h2=document.createElement("h2");
        h2.innerText="HHH222"
        h2.addEventListener('DOMNodeInsertedIntoDocument',()=>{//监听的是h2元素,而不是main父元素
            console.log(123213);
        })
        function set(){
            mainNode.appendChild(h2);
        }
   </script>

DOMNodeInsertedIntoDocument监听的是元素的插入

DOMNodeRemovedFromDocument

   <main class="abc">
    <h1 class="text">123</h1>
   </main>
   <button onclick="set()">点击</button>
   <script>
        const mainNode=document.querySelector('main');
        const h1=document.querySelector('h1');
        h1.addEventListener('DOMNodeRemovedFromDocument',()=>{
            console.log(123213);
        })
        function set(){
            mainNode.removeChild(h1);
        }
   </script>

DOMNodeRemovedFromDocument监听的是元素的移除

DOMAttrModified

   <main class="abc">
    <h1 class="text">123</h1>
   </main>
   <button onclick="set()">点击</button>
   <script>
        const mainNode=document.querySelector('main');
        const h1=document.querySelector('h1');
        h1.addEventListener('DOMAttrModified',()=>{
            console.log(123213);
        })
        function set(){
          h1.setAttribute("class","jkl");
        }
   </script>

DOMAttrModified监听的是元素属性的变化

DOMCharacterDataModified

       <main class="abc">
        <h1 class="text">123</h1>
       </main>
       <button onclick="set()">点击</button>
       <script>
            const mainNode=document.querySelector('main');
            const h1=document.querySelector('h1');
            h1.addEventListener('DOMCharacterDataModified',()=>{
                console.log(123213);
            })
            function set(){
                h1.firstChild.nodeValue="789a"
            }
       </script>

DOMCharacterDataModified监听的是元素中文本节点的变化,但是innerHTML、innerText与textContent都是监听不到的,使用el.firstChild.nodeValue才会触发DOMCharacterDataModified的监听

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值