2012-02-11 73 views
8

這是錯誤的嗎?如果是這樣,爲什在dom元素中存儲自定義數據

var elm = document.getElementById("myElm"); 
elm.customValue = {attr1 : "test", attr2 : "test"}; 

我理解如何使用數據屬性,但我不想攪渾了我的DOM與所有這些屬性。

回答

6

這是因爲你結合天然C對象(DOM元素)和JS對象在一起,一些垃圾收集算法不能處理這引入了在某些瀏覽器中的內存泄漏。 IE是其中之一。

這裏是關於IE瀏覽器的內存泄漏的MSDN文章:http://msdn.microsoft.com/en-us/library/ie/bb250448(v=vs.85).aspx

+6

對於正確的上下文,這隻會引入內存泄漏,如果有問題的對象從DOM中刪除,並且您期望它被垃圾收集。而且,如果與DOM元素相關的數據很大或者有成千上萬個這樣的數據被創建,然後從DOM中移除,則內存泄漏只會造成後果。對於在頁面的整個生命週期中停留在DOM中的對象,不存在內存泄漏。 – jfriend00 2012-02-11 17:06:03

+0

好注意!我忘記提及您需要刪除發生泄漏的元素。 – 2012-02-11 17:18:56

+0

奇妙的輸入傢伙!謝謝! – 2012-02-11 17:22:14

3

底線,你爲什麼不使用合適的工具可用?你不知道是否將來或近或遠,無論你使用的是什麼自定義屬性名稱,都將被添加到該特定元素的w3c規範中。現在,突然你的代碼被破壞了。

沒關係,添加自定義屬性到已經定義的屬性元素使你的代碼維護的噩夢。無論是你還是其他人在未來維護它,都會有一個「wtf」時刻,開發人員正試圖解決以下問題:a)自定義屬性是否添加到元素中或b)元素本身實際上是自定義對象。

最後,如果通過Ajax或動態HTML在dom中替換該元素會怎樣?現在這個屬性已經不存在了,你的代碼被破壞了。

+3

你說什麼都沒有意義...... – 2012-02-11 21:11:21

+0

什麼是沒有意義的? – 2012-02-12 01:20:22

相關問題