JavaScript允许您向任何对象(包括DOM节点)添加任意属性和方法。假设该属性是良好的命名空间(类似于_myLib_propertyName
),因此不太可能产生冲突,是否有任何充分的理由不在DOM节点中存储数据?
这样做有什么好的用例吗?
我认为这样做经常会导致编码风格或代码混乱或反直觉,但似乎有时候将“自定义”属性包含在DOM节点中将是一种有效且便捷的技术
答案 0 :(得分:15)
不,在DOM节点上存储您自己的属性通常是坏主意。
document.expando = false;
为整个文档(包括文档中的所有节点)关闭添加属性的功能。因此,如果页面中的任何代码包含此行,则依赖于向DOM节点添加属性的所有代码都将失败。答案 1 :(得分:7)
我认为最重要的是,不在DOM中存储数据的最佳理由是DOM旨在表示HTML页面的内容结构和样式。虽然您可以确保以良好的命名空间方式向节点添加数据以避免冲突,但您将数据状态引入可视化表示中。
我正在尝试找到一个支持或反对在DOM中存储数据的示例,并试图找到一个令人信服的案例。在过去,我发现数据状态与视觉状态的分离在重新设计我所研究过的网站时节省了头痛。
答案 2 :(得分:2)
如果您查看HTML 5,那么您可以使用字段的数据属性来存储该字段的信息。
答案 3 :(得分:0)
不要惊讶于IE 6& 7.它们与setAttribute vs设置为属性非常不一致。
如果你不小心,你可以设置循环引用并给自己一个内存泄漏。
http://www.ibm.com/developerworks/web/library/wa-memleak/
我总是将节点属性设置为最后的手段,当我这样做时,我会非常小心我的代码,并且比平时更加严格地进行测试。