Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript在IE中的文本节点上设置数据_Javascript_Html_Internet Explorer - Fatal编程技术网

使用javascript在IE中的文本节点上设置数据

使用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

我创建了一个脚本来将数据关联到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的解决方法吗?或者,是否有一个属性在文本节点上几乎是无用的,它允许我在其上设置数据?

我认为这是因为
createTextNode
生成与元素相反的直接文本。因此,无法为其指定属性

如果您想显示文本,我会尝试执行
createElement(“p”)
(或任何元素类型)


编辑:这是不正确的。有关解决方案,请参阅蒂姆·唐恩的答案。

最佳计划:不要这样做

通常,将属性分配给主机对象(即浏览器提供的任何内容,而不是本机JavaScript对象)是一个坏主意。主机对象没有义务允许这种扩展(也称为“expandos”),许多(例如IE中的ActiveX对象)也不允许。此外,IE允许您使用
document.expando=false在文档中的所有DOM节点上阻止expandos


另一种选择是使用(免责声明:我写的)存储文本节点的数据。它是一个哈希表实现,允许您使用任何对象(不仅仅是字符串)作为键。

否。
document.createTextNode
创建一个文本节点,正如其名称所强烈暗示的那样。createTextNode生成一个文本节点,而不仅仅是一个文本,我的问题不是显示文本。我正在寻找一种方法来分配它的属性。是的,我同意你的观点,但这是将元素链接到数据的唯一(安全)方法。所以在文本节点上没有办法做到这一点,对吗?添加了一个建议的替代方案。jshashtable在内部存储一组数组(“bucket”)。所有文本节点将位于同一数组中。该数组中的每个条目都是一个包含键(文本节点)和值(数据段)的对象。使用特定文本节点调用
get()
时,它只需在数组中搜索,直到找到
key
属性为文本节点的条目,并返回该条目的
属性。