修改元标记对象的原型

时间:2011-10-07 02:50:07

标签: javascript dom metatag

我正在动态生成元标记。我可以默认附加属于metatag原型的对象的属性。 namecontentID。但是当我尝试向对象添加不同的内容时,请说foo它不会附加。

如何添加自己的属性,以便我可以像添加示例中的name idcontent一样添加自己的属性。

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">

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

更符合标准的方法是在其前面添加data-

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

虽然,结果将是:

<meta id="id" name="name" data-foo="bar" />

答案 2 :(得分:0)

当您向DOM对象添加属性时,某些浏览器还会添加具有相同名称的属性,而不管它是什么(例如IE),如果名称与标准属性相同,则其他浏览器只会添加属性(例如Firefox)。

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

此外,DOM对象是宿主对象,所以可能不喜欢你添加非标准属性(同样,没有规范说他们必须让你)。

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