问答

How to use Mutation observer instead of settimeout

作者:admin 2021-07-06 我要评论

I have js code which appends a div if an element with a particular class is present in the DOM. Here is the code for that. The steps being first creat...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

I have js code which appends a div if an element with a particular class is present in the DOM. Here is the code for that. The steps being first creates a div with a partilcular class. Then it checks if the Dom has an element with class id banner , and if it has then it will append the created div using insertBefore. I'am using this because the banner element is dynamically added to the dom and not always present in the Dom. This works fine.

var overlayelem = document.createElement('div');
overlayelem.setAttribute("class", "overlay");

setTimeout(function(){
  var elem = document.getElementById('banner');
  elem.parentNode.insertBefore(overlayelem, elem.nextSibling);
}, 10)

But the problem being I cannot completely rely on setTimeout, I wish to use mutation ovberser to achieve this, So tried using that and code being like this ( Removed the setTimeout )

var overlayelem = document.createElement('div');
overlayelem.setAttribute("class", "overlay");


var observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if (mutation.type == "childList")  {
      var elem = document.getElementById('banner');
      if(elem) {
        elem.parentNode.insertBefore(overlayelem, elem.nextSibling);
      }
    }
  })
})

var elemBody = document.getElementById("body")
observer.observe(elemBody, {
  childList: true,
  subtree: true,
})

But this is not working correctly . The site keeps on loading and never stops. Can anybody help in what went wrong in Mutationobersever.

###

just lost observer.disconnect();?

observer.observe(elemBody, {
  childList: true,
  subtree: true,
})
//like this
observer.disconnect();
###

There is a endless loop. The mutation callback will be fired when the childList of body element change. At the same time mutation callback will change the childList of body.

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • How to use Mutation observer instead

    How to use Mutation observer instead

  • vue中添加高德地图,但是地图未显示,

    vue中添加高德地图,但是地图未显示,

  • ul>li覆盖在li标签上面问题

    ul>li覆盖在li标签上面问题

  • Vuetify v-file-input with icon only

    Vuetify v-file-input with icon only

腾讯云代理商
海外云服务器