空的HTML5数据属性是否有效?
我想写一个简单的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更棘手的问题,我唯一的要求是它是有效的HTML5。
是的,完全有效。 在你的情况下, data-modal-target
将代表一个布尔属性:
2.4.2布尔属性
元素上布尔属性的存在表示真值,缺less属性表示假值。
自定义数据属性规范没有提及对空属性处理的任何更改,因此有关空属性的一般规则适用于此处:
某些属性可以通过仅提供属性名称来指定,而没有值。
在以下示例中,
disabled
属性是使用空属性语法给出的:<input disabled>
请注意,空属性语法与将空string指定为属性的值完全等效,如下例所示。
<input disabled="">
所以你可以使用空的自定义数据属性,但需要特殊处理使用它们作为布尔值。
如果您通过element.dataset
访问属性:
- 当一个空的属性存在时,它的值是
""
。 - 当一个属性不存在时,你会得到
undefined
。
因此,你不能只是检查, if (element.dataset.myattr)
因为它将永远是false
。
你可以而且应该检查布尔属性,就像if (element.dataset.myattr !== undefined)
。
劳埃德的答案是不正确的。 他提到链接到布尔属性microsyntax,但data-*
属性在规范中没有被指定为布尔值。
是的,它是有效的语法来省略自定义数据属性的值。
“属性可以用四种不同的方式指定:
空属性语法只是属性名称。 该值隐含地是空string。 […]“ https://developers.whatwg.org/syntax.html#attributes-0
一方面,它通过validation器16.5.7 https://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-data-attribute其他布尔属性,如checked
https://www.w3.org/TR/html5/forms.html#attr-input-checked