包含空字符串的Html属性不显示=运算符

时间:2015-01-23 19:40:36

标签: javascript jquery html

jQuery中有一个用例:

 $select.append('<option value="">All</option>');

看起来它实际上是在HTML中添加元素:

<option value>All</option>

相反,我想要的是附加到元素,以便它给出一个空字符串值:

<option value="">All</option>

为什么不发生这种情况?

3 个答案:

答案 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" }));