在Javascript中禁用dom更改事件?

Posted

技术标签:

【中文标题】在Javascript中禁用dom更改事件?【英文标题】:disable dom changed event in Javascript? 【发布时间】:2014-03-02 13:56:49 【问题描述】:

我用

document.addEventListener("DOMSubtreeModified", function()
    

在文档的 DOM 发生变化时采取行动。

问题是:在该函数中,我自己修改了 DOM,但我不希望此更改调用 DOMSubtreeModified-event(导致我的代码一遍又一遍地运行)

有机会阻止吗?

【问题讨论】:

我会首先尝试解决导致您使用该事件的根本问题。 ?!?为什么你认为有问题? 我从未见过在使用事件委托或类似方法(例如 pub/sub)的地方使用该事件。 @OleAlbers 你应该在使用附加方法而不是像这样的通用事件时触发一个事件。 根据 MDN 关于突变事件:此功能已从 Web 中删除。尽管某些浏览器可能仍然支持它,但它正在被删除。不要在旧项目或新项目中使用它。使用它的页面或 Web 应用程序可能随时中断。 (developer.mozilla.org/en-US/docs/Web/Guide/Events/…) 【参考方案1】:

我曾经使用此解决方案做过同样的事情:

function modifyDOM(obj)
    obj._muteTrigger = true;

    //HERE do your actual dom change

    obj._muteTrigger = false;

document.addEventListener("DOMSubtreeModified", function()
    if(this._muteTrigger) return;

    //the other codes

    modifyDOM(this);
);

【讨论】:

以上是关于在Javascript中禁用dom更改事件?的主要内容,如果未能解决你的问题,请参考以下文章

DOM更改时的JavaScript事件侦听器[重复]

chrome扩展跟踪前端JavaScript,该JavaScript使用DOM/jQueryAPI在运行时操作html-DOM元素(例如,更改样式、附加事件侦听器)。

是否有“文本框内容更改”DOM 事件?

更改页面javascript代码(TamperMonkey)以将键盘笔触发送到父DOM

简述JavaScript函数节流

更改DOM后刷新浏览器悬停效果