如何检测 DOM 修改事件

Posted

技术标签:

【中文标题】如何检测 DOM 修改事件【英文标题】:How to detect DOM modification event 【发布时间】:2018-05-19 13:00:30 【问题描述】:

我已经尝试了几个小时来监听 DOM 更改事件,但仍然无法正常工作。

我需要将Chrome Debug Tools 中显示的事件检测为显示为粉红色的更改。

这是我尝试过的

  function listenForDomModified(node, listener) 
            node.addEventListener("DOMSubtreeModified", listener, false);
            var iframes = node.getElementsByTagName("iframe");
            for (var i = 0, len = iframes.length, doc; i < len; ++i) 
                // Catch and ignore errors caused by iframes from other domains
                try 
                    doc = iframes[i].contentDocument || iframes[i].contentWindow.document;
                    doc.addEventListener("DOMSubtreeModified", listener, false);
                 catch (ex) 
            
        
        var findElements = function () 
            elements.iframeBlock = $(SELECTOR.IFRAME_BLOCK);
        ;
        var onIframeChange = function (e) 

            console.log("CHANGE !!!");
            alert("DOM CHANGES");
        ;
        var setListeners = function () 
            listenForDomModified(elements.iframeBlock[0],onIframeChange);
            elements.iframeBlock.bind('DOMSubtreeModified', function(e) 
                  if (e.target.innerhtml.length > 0) 
                    alert("ON CHANGE");
                  
                  alert("ON CHANGE");
            );
            //elements.iframeBlock.change(onIframeChange);
        ;

请注意,我分别尝试了这些方法。

但仍然无法调用我的函数。但是Chrome 显示了这些更改。

如果有任何帮助,我将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

你试过了吗

$(document).on('change', function ()  /*code*/ );

【讨论】:

是的,从我的问题可以看出,它只是被注释掉了 您的代码中没有任何文档的更改监听器。函数底部的注释行与我所做的不同。另请注意,您甚至不调用函数 setListeners(),您只需定义它。【参考方案2】:

试试这个 jQuery 方法:

$("iframe").contents().find('body').on("change", function() 
   alert("DOM CHANGES");
);

未测试...

【讨论】:

以上是关于如何检测 DOM 修改事件的主要内容,如果未能解决你的问题,请参考以下文章

在 MSHTML IE8 中修改 DOM 时是不是会触发事件?

Angular项目实战Angular2的脏值检测机制

如何检测 DOM 节点插入? [复制]

检测/监控 DOM 变化的最有效方法?

Web APIs DOM-事件基础丨黑马程序员

Angular2 指令:如何检测 DOM 更改