在 dom 元素中存储自定义数据
这是错误的吗?如果是这样为什么?
var elm = document.getElementById("myElm");
elm.customValue = {attr1 : "test", attr2 : "test"};
我了解如何使用数据属性,但我不想用所有这些属性来混淆我的 dom。
Is this wrong? If so why?
var elm = document.getElementById("myElm");
elm.customValue = {attr1 : "test", attr2 : "test"};
I understand how to use the data attributes, but I don't want to muddy up my dom with all those attributes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这会在某些浏览器中引入内存泄漏,因为您将本机 C 对象(DOM 元素)和 JS 对象绑定在一起,并且某些垃圾收集算法无法处理此问题。 IE就是其中之一。
以下是一篇有关 IE 内存泄漏的 MSDN 文章: http://msdn .microsoft.com/en-us/library/ie/bb250448(v=vs.85).aspx
This introduces a memory leak in some browsers because you bind a native C object (the DOM element) and a JS object together and some garbage collection algorithms cannot deal with this. IE is one of them.
Here is an MSDN article about IE memory leaks: http://msdn.microsoft.com/en-us/library/ie/bb250448(v=vs.85).aspx
最重要的是,您为什么不使用合适的工具呢?您不知道将来,无论是近还是远,您使用的任何自定义属性名称是否都会添加到该特定元素的 w3c 规范中。现在,你的代码突然被破坏了。
不要介意向已经定义属性的元素添加自定义属性会使您的代码成为维护噩梦。无论是你还是其他人将来维护它,都会有一个“wtf”时刻,开发人员试图弄清楚是否 a) 自定义属性被添加到元素中,或者 b) 元素本身实际上是一个自定义对象。
最后,如果通过 Ajax 或动态 HTML 在 dom 中替换该元素会怎样?现在财产消失了,你的代码也被破坏了。
Bottom line, why wouldn't you use the proper tools available? You have no idea if in the future, near or far, whatever custom property name you are using will be added to the w3c specifications for that particular element. Now, suddenly your code is broken.
Never mind that adding custom properties to elements which already have defined properties makes your code a maintenance nightmare. Whether it's you or someone else maintaining it in the future, there's going to be a "wtf" moment where the developer is trying to igure out if a) a custom property was added to the element or b) the element itself is in fact a custom object.
Finally, what if that element is replaced in the dom via Ajax or dynamic HTML? Now the property is gone and your code is broken.
您应该考虑 HTML5 数据属性。
来自该人本人:http://ejohn.org/blog/html-5-data -属性/
You should consider HTML5 data-attributes.
From the man himself: http://ejohn.org/blog/html-5-data-attributes/