如何使用无值属性生成DOM节点

时间:2014-07-19 11:50:58

标签: javascript html dom polymer

我正在尝试生成这样的节点:

<div layout horizontal></div>

使用DOM API。

我正在尝试这样的事情:

var d = document.createElement("div");
d.setAttribute(...);

但从未真正设法生成我想要的东西。任何想法如何做到这一点?

感谢。

4 个答案:

答案 0 :(得分:6)

您的问题主题反映了这里的基本混淆。没有&#34;无价值的属性&#34;。 HTML中只有一种语法方便,可以编写没有特定值的属性,只要属性的存在意味着什么,无论其价值如何。

所以你可以写<input required><input required='true'><input required='false'><input required='notrequired'>,这意味着完全相同的事情(输入必填)。

当你尝试打印&#34;用你的话说,&#34;无价值&#34;属性,谁负责&#34;打印&#34;可能会选择对你好“#34;并表示没有值的属性,而不是显示空字符串。但是,这并不会改变属性确实具有空字符串值的事实,可以通过elt.getAttribute并直接检查属性值来轻松查看。

例如,如果我创建一个新div,然后将其内部HTML设置为<input required="">,那么某些环境(例如Chrome devtools)会将该元素显示为<input required>而不是{{1} }。换句话说,它只是在进出路上的语法糖。

一旦我创建了一个带有&#34;无价值的元素&#34;属性,实际上是一个空字符串,也许我可以通过将属性值设置为<input required="">使其真正无价值?不。 null仅将属性值设置为字符串elt.setAttribute('required', null)。与"null"相同。

请注意,DOM规范在undefined个对象上指定了specified的属性。但是,据我所知,这似乎没有被使用,因为Attr创建的属性总是将document.createAttribute设置为true,这是通过解析HTML创建的属性。 specified始终将x.innerHTML = '<input required>';设置为true等等。specified标记为只读,因此无法检查将其设置为false的效果无论如何。

无论如何,你的目标是什么?为什么你认为你需要这样做?

答案 1 :(得分:1)

您可以使用元素的setAttributeNode方法追加使用createAttribute创建的属性节点:

var el = document.createElement('div'),
    attr = document.createAttribute('layout');

el.setAttributeNode(attr);

答案 2 :(得分:1)

您正在寻找createAttribute()setAttributeNode()方法。

var elelement = document.createElement('div'),
var attribute = document.createAttribute('layout');
var attribute2 = document.createAttribute('horizontal');
element.setAttributeNode(attribute);
element.setAttributeNode(attribute2);

答案 3 :(得分:1)

只需将属性设置为空字符串。

element.setAttribute('hidden', '')