亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢測DOM中的更改

檢測DOM中的更改

檢測DOM中的更改當某些div或輸入添加到html時,我希望執行一個函數。這個是可能的嗎?例如,添加一個文本輸入,然后調用該函數。
查看完整描述

3 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

IE9+,FF,Webkit:


使用突變觀察員回到不受歡迎的地方突變事件如有需要:

(下面的例子是,如果僅針對附加或刪除節點的DOM更改)


var observeDOM = (function(){

  var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;


  return function( obj, callback ){

    if( !obj || !obj.nodeType === 1 ) return; // validation


    if( MutationObserver ){

      // define a new observer

      var obs = new MutationObserver(function(mutations, observer){

          callback(mutations);

      })

      // have the observer observe foo for changes in children

      obs.observe( obj, { childList:true, subtree:true });

    }

    

    else if( window.addEventListener ){

      obj.addEventListener('DOMNodeInserted', callback, false);

      obj.addEventListener('DOMNodeRemoved', callback, false);

    }

  }

})();


//------------< DEMO BELOW >----------------

// add item

var itemHTML = "<li><button>list item (click to delete)</button></li>",

    listElm = document.querySelector('ol');


document.querySelector('body > button').onclick = function(e){

  listElm.insertAdjacentHTML("beforeend", itemHTML);

}


// delete item

listElm.onclick = function(e){

  if( e.target.nodeName == "BUTTON" )

    e.target.parentNode.parentNode.removeChild(e.target.parentNode);

}

    

// Observe a specific DOM element:

observeDOM( listElm, function(m){ 

   var addedNodes = [], removedNodes = [];


   m.forEach(record => record.addedNodes.length & addedNodes.push(...record.addedNodes))

   

   m.forEach(record => record.removedNodes.length & removedNodes.push(...record.removedNodes))


  console.clear();

  console.log('Added:', addedNodes, 'Removed:', removedNodes);

});



// Insert 3 DOM nodes at once after 3 seconds

setTimeout(function(){

   listElm.removeChild(listElm.lastElementChild);

   listElm.insertAdjacentHTML("beforeend", Array(4).join(itemHTML));

}, 3000);

<button>Add Item</button>

<ol>

  <li><button>list item (click to delete)</button></li>

  <li><button>list item (click to delete)</button></li>

  <li><button>list item (click to delete)</button></li>

  <li><button>list item (click to delete)</button></li>

  <li><em>&hellip;More will be added after 3 seconds&hellip;</em></li>

</ol>


查看完整回答
反對 回復 2019-05-30
  • 3 回答
  • 0 關注
  • 705 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號