查找正在更改 DOM 元素的 javascript

Posted

技术标签:

【中文标题】查找正在更改 DOM 元素的 javascript【英文标题】:Find javascript that is changing DOM element 【发布时间】:2014-09-17 18:43:46 【问题描述】:

有什么技术可以用来找出 javascript 正在改变 html 元素吗?我很难找到特定元素如何在加载时添加display:none 的内联样式。我知道我最终会找到执行此操作的脚本,但我希望该过程更容易。

我理想的解决方案是在 DOM 元素被修改后立即中断 javascript 执行。我知道 Chrome 的开发工具能够右键单击一个元素并选择 Break On > Attribute Modifications。但是,这发生在页面加载期间的某个时候,所以如果我可以在所有其他脚本声明之前插入一些脚本,上面写着“监视具有类 XYZ 的元素”并在元素修改时中断 JS 执行,那将是非常好的。然后,JS 执行将在我可以看到修改元素的 JS 的地方中断,或者可以通过查看调用堆栈找到,但无论哪种方式,我都可以看到触发中断发生的脚本。我找到了一些答案,告诉我如何使用 Chrome 开发工具/Firebug 来做到这一点,但就像我说的,这个问题是关于编程方法的。

【问题讨论】:

为什么要注意把所有的 JS 放到一个目录中,然后对 'none' 执行一次 grep? 【参考方案1】:

右键单击DOM元素>中断>属性修改

通过https://elijahmanor.com/blog/7-chrome-tips-developers-designers-may-not-know中的#3

【讨论】:

@VitalyZdanevich 你能提供一个codepen的例子吗? 好的,所以你不能设置这种断点并重新加载页面......似乎只适用于源断点。【参考方案2】:

你可以使用:-

document.documentElement.addEventListener('DOMAttrModified', function(e)
  if (e.attrName === 'style') 
    console.log('prevValue: ' + e.prevValue, 'newValue: ' + e.newValue);
  
, false);

看看这个:-

Event detect when css property changed using Jquery

【讨论】:

是的,看来 DOMAttrModified 在所有主要浏览器中都已弃用 according to MDN【参考方案3】:

接受的答案并不能完全回答问题,因为它对页面加载没有帮助。

我解决了这个问题,但在有问题的元素之后立即放置了一个脚本块。

<script type="text/javascript"> debugger; </script>

然后我能够附加 dom 主题断点。通过右键单击元素并在开发人员工具中选择“中断”->“属性修改”,如其他答案中所述。

【讨论】:

当我发布问题时,我会很感激!我能够做我需要做的事,但这是我所缺少的。

以上是关于查找正在更改 DOM 元素的 javascript的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 学习-27.查找HTML DOM节点(元素)

Cef Browser Wpf 探索 dom,查找元素并更改值

javascript dom查找元素常用方法

JavaScript DOM:在容器中查找元素索引

JavaScript的DOM操作:查找元素节点

JavaScript HTML DOM