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

sin*_*nan 4 html javascript dom polymer

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

<div layout horizontal></div>
Run Code Online (Sandbox Code Playgroud)

使用DOM API.

我正在尝试这样的事情:

var d = document.createElement("div");
d.setAttribute(...);
Run Code Online (Sandbox Code Playgroud)

但从来没有真正设法生成我想要的东西.任何想法如何做到这一点?

谢谢.

小智 7

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

所以,你可以写<input required><input required='true'><input required='false'><input required='notrequired'>并且这将意味着同样的事情(这是输入需要).

当您尝试"打印"时,用"无价值"属性"打印",负责"打印"的人可以选择"对你好"并表示没有值的属性,而不是显示空字符串.但是,这并不会改变属性确实具有空字符串值的事实,可以通过elt.getAttribute直接获取和检查属性值轻松地看到.

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

一旦我创建了一个具有"无值"属性的元素,这实际上是一个空字符串,或许我可以通过将属性值设置为真正使其无价值null?不.elt.setAttribute('required', null)只是将属性值设置为字符串"null".同样的undefined.

请注意,DOM规范指定了specifiedon Attr对象的属性.然而,据我所知,这似乎并没有被使用,在这个意义上说,通过创建一个属性document.createAttribute总是被specified设置为true,通过解析HTML创建属性,如x.innerHTML = '<input required>';总是被specified设置为true,等,并specified为标记只读,所以没有办法检查将它设置为假的效果无论如何.

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

  • 虽然 `&lt;input required='true'&gt;` 或 `&lt;input required='false'&gt;` 或 `&lt;input required='notrequired'&gt;` 确实(可能)在大多数浏览器中工作,但根据到 HTML5 规范...事实上,明确禁止 `true` 和 `false`。根据规范,布尔属性的唯一允许值是空字符串或属性名称:http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#boolean-attributes (2认同)