0

我正在动态生成元标记。默认情况下,我可以附加作为元标记原型一部分的对象的属性。name,contentID. 但是当我尝试向对象附加一些不同的东西时,说它foo没有附加。

如何添加我自己的属性,以便我可以像在示例中添加name idand一样添加到它。content

var headID = document.getElementsByTagName("head")[0];        
var metaNode = document.createElement('meta');
metaNode.name = "name"; //appends
metaNode.id = "id"; //appends
metaNode.content = "content"; //appends
metaNode.foo = "bar"; //doesn't append
headID.appendChild(metaNode);

结果:<meta id="id" name="name" content="content">

想: <meta id="id" name="name" content="content" foo="bar">

4

3 回答 3

1

metaNode.setAttribute('foo', 'bar');

于 2011-10-07T02:57:56.900 回答
1

一种更符合标准的方法是在它前面加上data-

metaNode.setAttribute("data-foo", "bar");

虽然,结果将是:

<meta id="id" name="name" data-foo="bar" />
于 2011-10-07T03:01:37.787 回答
0

当你向 DOM 对象添加属性时,一些浏览器也会添加同名的属性,不管它是什么(例如 IE),其他浏览器只会添加名称与标准属性相同的属性(例如 Firefox) .

如果你真的想处理非标准属性,请使用 get/setAttribute,但它在 IE 中有点错误,所以只能将它用于非标准属性,将属性用于其他所有内容。如果您要添加非标准属性,最好将它们存储在 javascript 对象中,而不是修改 DOM 对象(主要是因为您可能会踩踏标准 DOM 属性或其他代码添加的属性)。

此外,DOM 对象是宿主对象,因此可能不喜欢您添加非标准属性(同样,没有规范说它们必须允许您)。

最后,没有理由相信存在元元素构造函数,它具有原型或元元素的实例继承自该原型。一些浏览器为 DOM 对象实现了类似 javascript 的原型继承,而另一些则没有。没有什么说 DOM 对象必须使用原型继承(有些不使用)。

于 2011-10-07T03:22:00.340 回答