使用javascript在IE中的文本节点上设置数据
我创建了一个脚本来将数据关联到dom节点,类似于jQuery.data方法。基本上,脚本在节点上设置属性,该属性是包含每个节点数据的对象的键,但在IE 7中,在文本节点上设置属性会引发错误:使用javascript在IE中的文本节点上设置数据,javascript,html,internet-explorer,Javascript,Html,Internet Explorer,我创建了一个脚本来将数据关联到dom节点,类似于jQuery.data方法。基本上,脚本在节点上设置属性,该属性是包含每个节点数据的对象的键,但在IE 7中,在文本节点上设置属性会引发错误: var a=document.createElement("div"); a.test="test"; alert(a.test); //Works and shows "test" var a=document.createTextNode("text"); a.test="test"; //Thro
var a=document.createElement("div");
a.test="test";
alert(a.test); //Works and shows "test"
var a=document.createTextNode("text");
a.test="test"; //Throws an error
你知道这个bug的解决方法吗?或者,是否有一个属性在文本节点上几乎是无用的,它允许我在其上设置数据?我认为这是因为
createTextNode
生成与元素相反的直接文本。因此,无法为其指定属性
如果您想显示文本,我会尝试执行createElement(“p”)
(或任何元素类型)
编辑:这是不正确的。有关解决方案,请参阅蒂姆·唐恩的答案。最佳计划:不要这样做 通常,将属性分配给主机对象(即浏览器提供的任何内容,而不是本机JavaScript对象)是一个坏主意。主机对象没有义务允许这种扩展(也称为“expandos”),许多(例如IE中的ActiveX对象)也不允许。此外,IE允许您使用
document.expando=false在文档中的所有DOM节点上阻止expandos代码>
另一种选择是使用(免责声明:我写的)存储文本节点的数据。它是一个哈希表实现,允许您使用任何对象(不仅仅是字符串)作为键。否。document.createTextNode
创建一个文本节点,正如其名称所强烈暗示的那样。createTextNode生成一个文本节点,而不仅仅是一个文本,我的问题不是显示文本。我正在寻找一种方法来分配它的属性。是的,我同意你的观点,但这是将元素链接到数据的唯一(安全)方法。所以在文本节点上没有办法做到这一点,对吗?添加了一个建议的替代方案。jshashtable在内部存储一组数组(“bucket”)。所有文本节点将位于同一数组中。该数组中的每个条目都是一个包含键(文本节点)和值(数据段)的对象。使用特定文本节点调用get()
时,它只需在数组中搜索,直到找到key
属性为文本节点的条目,并返回该条目的值
属性。