我需要一個有效的機制來檢測DOM的變化。最好是跨瀏覽器,但如果有任何有效的手段,而不是跨瀏覽器,我可以實現這些與一個故障安全跨瀏覽器方法。檢測/監測DOM變化的最有效方法?
特別是,我需要檢測會影響頁面上文本的更改,因此需要任何新的,刪除或修改的元素,或更改內部文本(innerHTML)。
我無法控制所做的更改(它們可能是由於第三方JavaScript包括等),所以無法從這個角度來處理 - 我需要以某種方式「監視」更改。
目前我實施了一個「quick'n'dirty」方法,每隔一段時間檢查body.innerHTML.length
。這當然不會檢測到導致返回相同長度的變化,但在這種情況下「足夠好」 - 發生這種情況的可能性非常小,並且在該項目中,未能檢測到變化將不會導致丟失數據。
body.innerHTML.length
的問題是它很貴。在快速瀏覽器上,它可能需要1到5毫秒的時間,這可能會讓事情變得很糟糕 - 我也在處理大量的iframe,並且這些都會加起來。我很確定這樣做的代價很大,因爲innerHTML文本不是由瀏覽器靜態存儲的,每次讀取時都需要從DOM中計算。
我正在尋找的答案類型是從「精確」(例如事件)到「足夠好」的任何內容 - 可能與innerHTML.length方法一樣,是「quick'n'dirty」,但是執行得更快。
編輯: 我還要指出的是,雖然這將是「好」來檢測已被修改的精確元素,它不是絕對必要的 - 只是一個事實,即出現了任何變化是夠好了。希望這可以擴大人們的反應。我要去調查突變事件,但我仍然需要IE支持的後備,所以任何拙劣的,有創意的,不尋常的想法都會受到歡迎。
上次這個問題沒有太多運氣:http://stackoverflow.com/questions/648996/how-do-i-monitor-the-dom-for-changes – 2010-03-16 20:01:49
是的,我看到了,你是對...沒有太多的運氣。 *但是*,因爲我不需要100%的準確性,也因爲我不需要指出哪個元素已經改變,只是*有*改變,我希望人們想出一些創造性的解決方案對我來說... – Graza 2010-03-17 10:31:51
[是否有JavaScript/jQuery DOM更改偵聽器?](https://stackoverflow.com/questions/2844565/is-there-a-javascript-jquery-dom-change-listener) – Makyen 2017-10-28 09:21:25