问题标签 [mutation-events]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
696 浏览

javascript - DOMNodeInsertedIntoDocument 应该冒泡吗?

我一直认为 DOMNodeInsertedIntoDocument/DOMNodeRemovedFromDocument 事件不应该冒泡,对我来说这已经足够了。然而,就在最近,我再次查看规范并发现在一个位置它说这些事件不应该冒泡(事件类型的完整列表),而在其他位置说它们应该(DOMNodeInsertedIntoDocumentDOMNodeRemovedFromDocument)。

我也在网上查了一下,发现了好几个实现,都在实现的行为上不一样。

问题是:这些事件真的应该冒泡吗?你觉得什么更有意义?

更新:发现在DOM-Level-2-Events规范中没有歧义,因为它在一个位置提到了这些事件。

更新 2:提出这个问题是为了验证这些事件在Ample SDK Ajax 框架中的行为,该框架旨在实现所有基于标准的技术。

0 投票
4 回答
11736 浏览

javascript - Firefox中文本框的onpropertychange?

如何onpropertychange使用 JavaScript 处理 Firefox 中的文本框?

下面是一个例子:

0 投票
1 回答
938 浏览

javascript - jQuery/XML:使用 DOM-Mutation-Events 同步数据和表示

我正在创建一个 Web 应用程序,它使用 jQuery 来修改和 HTML 来表示数据。文档中可以有多个与单个数据节点相关的表示。用户可以动态创建它们。例如,数据将被表示并且可以在表格中进行修改。此外,用户有意见扩展“快速概览面板”以快速访问特定数据。

如果一个用户控件触发事件 => 必须修改数据 => 与相同数据相关的其他用户控件需要刷新。

实际问题是每个用户控件都处理自己的修改。更改内容处理程序需要知道数据修饰符,因此它可以跳过表示更新。此类问题是否存在现有的通用解决方案?如果没有,你能提出一个好的解决方案吗?

0 投票
1 回答
1087 浏览

javascript - XUL 将事件附加到使用 javascript 添加的锚点

我正在编写一个 Firefox 扩展,它将事件侦听器添加到页面上的所有锚标记。基本上我有:

这适用于页面上的大多数标签。问题是使用 javascript 添加的标签没有附加事件侦听器。我试过重新定义createElement:

我已经尝试添加一个 DOM 插入侦听器

但两者都不起作用。如何获取对这些锚对象的引用,以便向它们添加侦听器?

谢谢

0 投票
5 回答
20412 浏览

dom - 是否有可以在 webkit 中使用的 DOMAttrModified 的替代方法

我需要利用这个 DOM 事件。IE 有 onpropertychange,它也可以做我需要它做的事情。然而,Webkit 似乎不支持这个事件。有没有我可以使用的替代方案?

0 投票
6 回答
14964 浏览

javascript - DOMNodeInserted 在 IE 中的等效项?

除了使用计时器来计算一段时间内的元素数量并寻找变化之外,我想不出更好的方法来模拟这个事件。

是否有某种专有的 IE 版本的 DOMNodeInserted?谢谢。

0 投票
6 回答
57741 浏览

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

我需要一种有效的机制来检测对 DOM 的更改。最好是跨浏览器,但如果有任何不是跨浏览器的有效方法,我可以使用故障安全的跨浏览器方法来实现这些。

特别是,我需要检测会影响页面文本的更改,因此需要任何新的、已删除或修改的元素,或对内部文本 (innerHTML) 的更改。

我无法控制所做的更改(它们可能是由于包含 3rd 方 javascript 等),因此无法从这个角度进行处理 - 我需要以某种方式“监控”更改。

目前我已经实现了一个“quick'n'dirty”方法,它body.innerHTML.length会定期检查。这当然不会检测到导致返回相同长度的更改,但在这种情况下“足够好” - 发生这种情况的可能性非常小,并且在这个项目中,无法检测到更改不会导致在丢失的数据中。

问题body.innerHTML.length是它很贵。在快速浏览器上可能需要 1 到 5 毫秒,这会使事情陷入困境——我还要处理大量的 iframe,所有这些都加起来了。我很确定这样做的代价是因为 innerHTML 文本不是由浏览器静态存储的,并且每次读取时都需要从 DOM 中计算出来。

我正在寻找的答案类型是从“精确”(例如事件)到“足够好”的任何类型 - 可能像 innerHTML.length 方法一样“快速'n'dirty”,但执行速度更快。

编辑:我还应该指出,虽然检测已修改的精确元素会“很好”,但这并不是绝对必要的——只要有任何变化就足够了。希望这能扩大人们的反应。我将研究 Mutation Events,但我仍然需要 IE 支持的后备,所以任何古怪的、有创意的、不合常规的想法都会受到欢迎。

0 投票
4 回答
3389 浏览

javascript - 可以在初始 DOM 解析期间/之前修改 DOM 吗?

是否可以在初始 DOM 解析期间或之前修改 DOM?还是我必须等到 DOM 被解析和构建后才能与之交互?更具体地说,是否有可能阻止 DOM 中的脚本元素使用用户脚本/内容脚本或 chrome 或 firefox 中的类似脚本运行?

在解析 DOM 之前尝试在 DOMNodeInserted 上使用 eventListeners,但这些仅在 DOM 构建后才会触发。

0 投票
10 回答
370691 浏览

javascript - 检测 DOM 中的变化

当一些 div 或输入添加到 html 时,我想执行一个函数。这可能吗?

例如,添加了一个文本输入,然后应该调用该函数。

0 投票
1 回答
239 浏览

google-chrome - 如何获取页面中更改的内容?

我为最新的 Chrome 浏览器编写了一个用户脚本。加载后脚本似乎无法获取页面的更改内容(例如,在页面加载后,我单击了¿sth?并弹出了一个嵌入式窗口)。

即使我使用window.setTimeout()了,我仍然无法通过定时器回调获取更新的内容document.getElementById()。我检查了页面,发现弹出元素存在于 DOM 中。

这是用户脚本的限制吗?或者可以使用其他一些方法来获取用户脚本中的更新?

更新: 我按照建议尝试DOMSubtreemodified了活动。但行为仍然很奇怪。

我只在 my.safaribooksonline.com 的用户脚本中添加了一行 JavaScript,

但是警报框显示“未定义”作为OpenSignInPopup. 但是我可以同时在同一页面的脚本控制台中运行警报语句,并将结果显示为“函数”。

最初运行用户脚本时未加载此函数。那么如何在用户脚本中使用它呢?