ste*_*and 24 javascript dom object
我一直在寻找一个直接的答案(我可以想到很多可能性,但我想知道真正的原因):
jQuery提供了一个.data()方法,用于将数据与DOM Element对象相关联.是什么让这有必要?将属性(或方法)直接添加到DOM元素对象是否有问题?它是什么?
bob*_*nce 43
将属性(或方法)直接添加到DOM元素对象是否有问题?
潜在的.
没有Web标准说您可以向DOM节点添加任意属性.它们是具有浏览器特定实现的"主机对象",而不是"本机JavaScript对象",根据ECMA-262,您可以执行您喜欢的操作.其他主机对象不允许您添加任意属性.
实际上,因为最早的浏览器确实允许你这样做,所以它无论如何都是事实上的标准......除非你故意告诉IE通过设置禁止它document.expando= false.您可能不会自己这样做,但如果您正在编写要在其他地方部署的脚本,那么您可能会担心.
任意属性存在实际问题,因为您实际上并不知道您选择的任意名称在某些尚未测试的浏览器中或在未来版本的浏览器中没有现有含义或尚不存在的标准.添加一个属性element.sausage= true,你无法确定任何时间空间和时间的浏览器都不会使用它作为信号来吸引令人兴奋的DOM Sausage Make The Browser Crash功能.因此,如果你确实添加了一个任意属性,请确保给它一个不太可能的名称,例如element._mylibraryname_sausage= true.这还有助于防止名称空间与可能添加任意属性的其他脚本组件发生冲突.
IE中还存在一个问题,即您添加的属性被错误地视为属性.如果你序列化元素,innerHTML你会在输出中得到一个意外的属性,例如.<p _mylibraryname_sausage="true">.如果您将该HTML字符串分配给另一个元素,您将在新元素中获得一个属性,可能会使您的脚本混乱.
(注意这只适用于值为简单类型的属性;对象,数组和函数不会出现在序列化HTML中.我希望jQuery知道这一点,因为它实现data方法的方法非常糟糕,导致错误,并减慢许多简单的DOM操作.)