2010-03-24 86 views
7

如果知道它將被修改,是否有任何實際的方法可以說明DOM的哪部分已被修改?是否可以判斷DOM是否被修改,以及哪個部分?

我正在寫一個插件,將與JavaScript一起運行,我沒有寫。在修改DOM之前會觸發一個事件,修改後會觸發一個事件。我的工作是決定發生了什麼變化。這是可能的,如果是的話,這樣做最不可怕的方式是什麼?

+0

這是一個有趣的問題。沒有好的方式,也沒有體面的方式。我的第一個想法是在「更改前」事件中複製所有dom對象,然後在「更改後」事件中將當前dom對象與您製作的副本進行比較。如果您有一個可以更改的dom對象的已知列表,並且您預期的更改次數有限,則此選項是合理的。即使這是一個醜陋的解決方案,也不會推薦它,但它是首先想到的。 – Jay 2010-03-24 17:49:14

+1

您可以編寫代碼來計算每個節點上子DOM的聚合哈希值(根據您在DOM中關心的任何內容)。重要的是每個節點的散列是節點*和*子樹的函數。然後,您可以通過首先檢查哈希代碼是否已更改來跟蹤更改。 – Pointy 2010-03-24 17:57:04

+0

感謝您的回覆。 – mkoryak 2010-03-24 18:58:39

回答

0

這是不可能在任何實用的方式

+0

除了IE <= 8之外,所有主流瀏覽器都可以使用DOM突變事件。 – 2011-05-01 23:53:59

1

如果您知道要修改DOM元素的哪個方面,則可以在頁面加載時將該屬性的值存儲在每個元素的.data()節點中,然後在腳本運行後進行比較。

0

您也可以對頁面文本(例如完整源字符串)進行散列並將其與當前散列進行比較(在更改時)。

0

使用jquery,你可以觸發:動畫過濾器來搜索被動畫的元素,我不知道你是否會在這些事件之間有如此之多的延遲,但是如果在初始變換時主觸發器剛好在變換時觸發發起你可以嘗試捕捉:動畫元素和捕捉初始狀態結束動畫之前,然後在結束捕捉狀態和比較,它只有一個提示我沒有任何示範或方式來重現您的工作環境,但我希望這個指導方針可以給你是個想法。

相關問題