空HTML数据属性是否有效



我想写一个简单的jQuery插件,在指定的元素下显示内联模式。我的想法是让脚本根据元素上指定的数据属性自动初始化。

一个非常基本的例子:

<p data-modal-target>Hover over me for an inline modal!</p>
<div data-modal-content data-modal-align="right" data-modal-trigger="hover" data-modal-offset="10px"><!-- any desired syntax can go here --></div>

我只是想知道上面例子中的data-modal-target是否有效,或者它必须是data-modal-target="true"?我不在乎比IE9等更糟糕的东西,我唯一的要求是它是有效的HTML。

是的,完全有效。在您的情况下,data-modal-target将表示布尔属性:

2.4.2布尔属性

元素上布尔属性的存在表示true值,而该属性的缺失表示错误值。

有效,但它们不是布尔值

自定义数据属性规范没有提到对空属性处理的任何更改,因此关于空属性的一般规则适用于此:

某些属性可以通过只提供属性名称而不提供值来指定。

在以下示例中,disabled属性使用空属性语法:

<input disabled>

请注意,空属性语法完全等同于指定空字符串作为属性的值,如下例所示。

<input disabled="">

因此,您可以使用空的自定义数据属性,但需要特殊处理才能将它们用作布尔值。

访问空属性时,其值为""。由于这是一个错误的值,所以不能仅使用if (element.dataset.myattr)来检查属性是否存在。

您应该使用element.hasAttribute('myattr')if (element.dataset.myattr !== undefined)


劳埃德的回答是错误的。他提到了到布尔属性microsyntax的链接,但data-*属性在规范中没有指定为布尔属性。

是的,省略自定义数据属性的值是有效的语法。

"属性可以通过四种不同的方式指定:

空属性语法只是属性名称。该值隐式为空字符串。[…]"https://developers.whatwg.org/syntax.html#attributes-0

一方面,它通过验证器16.5.7https://validator.w3.org/nu/#textarea:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8"/>
  <title>a</title>
</head>
<body data-asdf>
</body>
</html>

另一方面,HTML5在data-属性的规范中没有说明它们是布尔型的:https://www.w3.org/TR/html5/dom.html#custom-数据属性,而对于其他布尔属性,如checked,它非常清楚地说明了这一点https://www.w3.org/TR/html5/forms.html#attr-输入检查

相关内容

最新更新