jQuery中有一个用例:
$select.append('<option value="">All</option>');
看起来它实际上是在HTML中添加元素:
<option value>All</option>
相反,我想要的是附加到元素,以便它给出一个空字符串值:
<option value="">All</option>
为什么不发生这种情况?
答案 0 :(得分:3)
您的问题似乎表明对所涉及语法的含义存在一定程度的混淆。根据您的代码中value
的出现缺少=""
这一事实,您可以推断出这代表了一个HTML&#34;值&#34;元素 - 事实并非如此。这里实际发生的事情与HTML属性的值可以表示的多种方式有关。让我们探索这些格式,以便更好地了解您所看到的内容。
HTML属性的有效格式
您表示value
属性的最常见方式是引号,如下所示:
value="something"
但是,如果您查看the section of the HTML5 spec regarding attributes,它实际上也有效以四种不同的方式表示属性值:
空属性语法
不带引号的属性值语法
单引号属性值语法
双引号属性值语法
专门针对您的案例的格式是&#34;空属性语法&#34;。进一步阅读,规范描述了空属性语法,如下所示:
只是属性名称。该值隐含为空字符串。
还有一个关于historical HTML 5 reference for attributes的详细解释:
可以通过仅提供属性来指定某些属性 名字,没有价值。
在以下示例中,disabled属性与。一起给出 空属性语法:
<input disabled>
请注意,空语法与指定空语句完全等效 string作为属性的值,如下例所示。
<input disabled="">
正如您所看到的,这意味着对于HTML元素,在表示没有值的属性时,=""
是可选的。因此,某些浏览器只显示该属性而没有不必要的标记。无论该属性是呈现为value
还是value=""
,任何符合标准的浏览器都会知道value
是一个包含字符串的属性,因此它将始终返回该属性&#39; s内容,如果有的话,或者在没有明确内容的情况下至少是一个空字符串。
答案 1 :(得分:3)
它实际上是在HTML
中添加元素
不,它没有。
它将元素添加到DOM,而不是HTML。
当您使用浏览器的开发人员工具查看DOM时,它将使用类似HTML的语法显示。在此语法中,将呈现值为空字符串的value
属性,而不会显示=""
部分。 (看起来语法的一部分实际上是有效的HTML,但我没有在规范中找到允许它的部分。)
如果您(使用Chrome作为示例),您可以右键单击其父元素并选择“编辑为HTML”,此时您将再次看到=""
。
如果您要提交包含select元素的表单,您会看到发送的数据为:select_name=
。这表明该值已正确设置为空字符串。如果它没有工作,你将得到select_name=All
,因为如果没有设置值,则元素的文本被用作值。
答案 2 :(得分:-1)
$select.append($('<option>', { value: "", text: "All" }));