【发布时间】:2008-10-20 22:38:38
【问题描述】:
According to spec,只有BODY 和FRAMESET 元素提供了一个“onload”事件来附加,但我想知道动态创建的 DOM 元素何时被添加到 JavaScript 中的 DOM。
我目前使用的超朴素启发式方法如下:
- 向后遍历元素的 parentNode 属性,直到找到最终的祖先(即 parentNode.parentNode.parentNode.etc 直到 parentNode 为空)
- 如果最终祖先具有已定义的非空 body 属性
- 假设有问题的元素是 dom 的一部分
- 其他
- 在 100 毫秒内再次重复这些步骤
我所追求的要么是确认我所做的是足够的(同样,它在 IE7 和 FF3 中都有效),要么是一个更好的解决方案,无论出于何种原因,我完全没有注意到;也许我应该检查其他属性等。
编辑:我想要一种与浏览器无关的方法,不幸的是,我并不生活在一个浏览器的世界中;也就是说,感谢您提供特定于浏览器的信息,但请注意您知道它在哪个浏览器中确实工作。谢谢!
【问题讨论】:
-
您怎么会不知道某些内容何时添加到您的文档中?您不是该页面的作者吗?
-
@Sergey:你抽象的东西越多,一只手不知道另一只手在做什么的可能性就越大。
-
完全正确 - 我正在构建一个“小部件”,它需要在内部知道它何时被添加到 DOM - 但由于我不一定是消费者,我不知道什么时候,因为客户端代码将确定这一点。
-
IMG 的 onload 事件不是 W3C 规范的一部分。此外,我希望这个功能不仅仅用于图像,所以它对我没有多大好处,而且会更脆弱。
-
浏览器有一种方法可以确定一个节点是否在另一个节点内:
Node.contains。在下面添加了答案:stackoverflow.com/a/13725984/101869
标签: javascript dom