【发布时间】:2023-03-14 00:30:01
【问题描述】:
有没有办法使用MutationObserver 检测元素的父元素何时更改(即从null 更改为!null - 即元素最初添加到DOM 时)?我找不到任何说明如何实现这一点的文档。
我正在使用document.createElement() 以编程方式创建元素。我从函数返回创建的元素,但想从 within 函数创建一个侦听器,以便在元素最终添加到 DOM 时做出反应,而不知道 where 或 将添加到哪个父级。
老实说,我不太清楚该怎么表达。
const elem = document.createElement('div');
let added = false;
elem.addEventListener('added-to-dom', () => { added = true; });
// ^ how do I achieve this?
assert(added == false);
document.body.addChild(elem);
assert(added == true);
我不明白理解这一点或关闭它的原因有什么困难。
【问题讨论】:
-
从
null到!null是什么意思?如果元素存在于 DOM 中,那么它总是有父元素,所以你必须精确你的问题。但是使用MutationObserver基本上你可以跟踪任何你想观察body元素的东西。 -
不,MutationObserver 只能观察记录的内容:子节点和属性。您想要的东西 - 检测元素何时附加到实时 DOM - 可以通过已弃用的 DOM 突变事件 AFAIK 来实现。
-
@wOxxOm 添加了说明。
-
根据您的说明,您的问题不是:我如何检测何时将编程创建的元素添加到 DOM 中?
-
是的,这是一种说法,但我担心我会得到像你这样建议听父母的答案 - 当我不知道父母可能是什么时。我想看看这是否可以通过
MutationObservers来完成,其中的答案听起来像是不能。我真的不明白它是如何令人困惑的。
标签: javascript html mutation-observers