我需要注意特定DOM元素的任何子元素的屬性更改。到目前爲止,我一直在使用mutation events。注意DOM的變化,優雅的方式
問題是 - 他們是越野車:例如根據Chromium,DOMAttrModified
沒有被解僱,但是DOMSubtreeModified
是。問題很容易解決:因爲根據規範,如果其他任何事件被觸發,DOMSubtreeModified
會被觸發,所以我只聽到DOMSubtreeModified
。
無論如何,在最近的版本中,如果屬性已被修改,則Chromium會停止發射任何東西。
然而,新的Mutation Observer API完美無瑕。直到現在,我只需要在任何特定元素的子樹的任何變化時觸發回調 - 僅僅因爲沒有別的東西應該改變 - 所以我通過使用突變事件來解決我的問題&突變觀察者(當可用時)在同一段代碼中。
但是,現在我需要對事件進行更強大的過濾(例如,在新節點上,在已刪除的節點上) - 所以有庫,可能是jQuery插件,這將允許我優雅地使用這些API的均爲 - MutationObserver
(如果可用)和突變事件作爲回退,並具有針對特定事件類型(例如添加元素,更改屬性)進行過濾的功能。
E.g.
$("#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:http://code.google.com/p/mutation-summary/ 。我也發現,這似乎是你要求的簡單版本:http://stackoverflow.com/questions/10868104/can-you-have-a-javascript-hook-trigger-after-a- dom-elements-style-object-change – thirtydot 2012-07-15 11:56:13
我也發現了突變總結,但它不支持突變事件作爲後備。 你發佈的線程的第一個答案基本上是我在我的代碼中觀察屬性更改。 同樣的原理,可以構建一個庫,允許使用突變觀察者和(作爲後備)事件觀察特定的DOM事件。那是我需要的。 – Ivo 2012-07-15 12:00:57
+1:我真的挖掘'最佳實踐'的問題。 – 2012-07-21 23:50:57