我正在动态生成元标记。我可以默认附加属于metatag原型的对象的属性。 name
,content
和ID
。但是当我尝试向对象添加不同的内容时,请说foo
它不会附加。
如何添加自己的属性,以便我可以像添加示例中的name
id
和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">
答案 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对象必须使用原型继承(有些则没有)。