【发布时间】:2012-07-14 13:15:11
【问题描述】:
我需要观察特定 DOM 元素的任何子元素的属性更改。到目前为止,我一直在使用mutation events。
问题是 - 他们是错误的:例如在 Chromium 下,DOMAttrModified 没有被解雇,但 DOMSubtreeModified 被解雇了。这个问题很容易解决:因为根据规范,如果任何其他事件被触发,DOMSubtreeModified 就会被触发,所以我只听了DOMSubtreeModified。
无论如何,Chromium 在最近的版本中,如果属性被修改,就会停止触发任何东西。
然而,新的Mutation Observer API 却完美无缺。
直到现在,我只需要在特定元素的子树发生任何更改时触发回调 - 只是因为没有其他东西应该改变 - 所以我通过使用突变事件和突变观察者(如果可用)解决了我的问题在同一段代码中。
但是,现在我需要对事件进行更强大的过滤(例如,在新节点上、在已删除节点上) - 那么是否有 一个库,可能是一个 jQuery 插件,它允许我可以优雅地使用 both 这些 API - MutationObserver(如果可用)和突变事件作为后备,具有过滤特定事件类型(例如添加元素、更改属性)的能力。
例如
$("#test").watch({onNewElement: 1}, function(newElement){})
$("#test").watch({onNewAttribute: 1}, function(modifiedElement) {})
或者没有 jQuery
watchChanges("#test", {onNewElement: 1}, function(newElement){})
watchChanges("#test", {onNewAttribute: 1}, function(modifiedElement){})
【问题讨论】:
-
一些搜索发现了这个,但它只支持新的API:code.google.com/p/mutation-summary。我还发现了这个,这似乎是您所要求的简单版本:stackoverflow.com/questions/10868104/…
-
我还发现了突变摘要,但它不支持突变事件作为后备。您发布的线程的第一个答案基本上是我在代码中观察属性变化所做的。在相同的原则下,可以构建一个库,允许使用突变观察者和(作为后备)事件来监视特定的 DOM 事件。这就是我需要的。
-
+1:我真的很喜欢“最佳实践”问题。