我已经创建了一个脚本来将数据与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"; //Throws an error
那么你知道这个bug的解决方法吗?或者是否有一个在文本节点上几乎无用的属性允许我在其上设置数据?
答案 0 :(得分:1)
最好的计划:不要这样做。
通常,将属性分配给主机对象(即浏览器提供的任何内容而不是本机JavaScript对象)是一个坏主意。主机对象没有义务允许这种扩展(例如,“expandos”)和许多(例如,IE中的ActiveX对象)不允许。此外,IE允许您使用document.expando = false;
阻止文档中所有DOM节点上的expandos。
一种替代方法是使用jshashtable(免责声明:我编写它)来存储文本节点的数据。它是一个哈希表实现,允许您使用任何对象(而不仅仅是字符串)作为键。
答案 1 :(得分:0)
我认为这是因为createTextNode
制作直文而不是元素。因此,您无法为其指定属性。
如果你想显示文字,我会尝试createElement("p")
(或任何元素类型)。
编辑:这是不正确的。请参阅Tim Down对该解决方案的回答。