var observer = new MutationObserver(callback);
css
callback接受MutationRecord和MutationObserver兩個入參。MutationRecord描述的是變化;MutationObserver觸發callback。html
function callback(mutationList, observer) { mutationList.forEach((mutation) => { switch (mutation.type) { case 'childList': // 關注mutation.addedNodes和mutation.removedNodes屬性 break; case 'attributes': // 關注mutation.target, mutation.attributeName, mutation.oldValue break; } }) }
callback() 函數會在observer用observe()開始監視DOM時,指定的觀察請求配置相匹配的更改時,將調用callback()函數。
所發生的更改(對子列表的更改或對屬性的更改)經過查看mutation.type屬性。node
下面的代碼設置了整個觀察進度。函數
var targetNode = document.querySelector("#someElement"); var observerOptions = { childList: true, attributes: true, subtree: true, // 忽略或設置爲false,只觀察父節點的更改 } var observer = new MutationObserver(callback); observer.observe(targetNode, observerOptions);
<style lang="scss"> // 隱藏跳轉高德地圖的按鈕 /deep/ .amap-call { display: none; } </style>
不使用深度選擇器的話,還有沒有其餘的方式去修改?
監聽panel動態插入 .amap-all DOM或許能夠試試。this
<div id="panel"></div>
// 動態檢測panel的amap-call節點 observePanelAmapCallNode() { const callback = (mutationList, observer) => { mutationList.forEach((mutation) => { switch (mutation.type) { case 'childList': // 關注mutation.addedNodes和mutation.removedNodes屬性 console.log(mutation, observer); if (mutation.addedNodes[0].className === 'amap-call') { mutation.addedNodes[0].style.display = 'none'; } break; default: { console.log(mutation, observer); } } }); }; const targetNode = document.querySelector('#panel'); const observerOptions = { childList: true, subtree: true, }; this.panelAmapCallNodeObserver = new MutationObserver(callback); this.panelAmapCallNodeObserver.observe(targetNode, observerOptions); }, // 取消監聽observer disconnectObserver() { this.panelAmapCallNodeObserver.disconnect(); },
mounted() { this.observePanelAmapCallNode(); }
beforeDestroy() { this.disconnectObserver(); }
默認樣式(修改前)spa
自定義樣式(修改後)3d
MutationObserver成功!code
參考資料:https://developer.mozilla.org...server