2012-02-11 54 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

相关问题