2013-08-02 70 views
1

你可以使用data-*属性为布尔属性?如果没有,是否有其他选择?布尔数据 - *属性

例如,你可以有

<input disabled> 

这将是在某些情况下有

<input data-on> 

使用data-on="true"data-on=""有用是不可取的 - 属性的存在应指示它的布尔值。

+0

本质'数据on'是' data-on =“”',u 。jQuery的歌唱,你可以简单地做'$( “输入”)为( “[数据上]”);' – FabianCook

+0

注:VAR T =使用document.createElement( “输入”); t.disabled = true; t.outerHTML == '<输入禁用= “”>'; 所以我会说没有,但您可以采用不同的序列比HTML浏览器... – dandavis

+0

的* *存在的属性应该指示其布尔值的!'typeof运算element.dataset.on ==“undefined''。 – dfsq

回答

2

你的确可以使用data-*属性仿佛他们是布尔属性 - 然而,就dataset而言<input data-on>等同的<input data-on="">。这意味着,不像required或其他布尔属性,你将不能够做到这一点:

<input class="some-class" data-on required> 

var elementOfInterest = document.querySelector(".some-class"); 
if (elementOfInterest.dataset.on) { 
    // We will never get here because dataset.on === "" 
    // and "" == false 
} 

if (elementOfInterest.required) { 
    // We *do* get here because required is a boolean attribute 
} 

相反,你需要做对不确定的一个明确的检查:

if (elementOfInterest.dataset.on !== undefined) { 
    // We will get here because "" !== undefined 
} 

这给你不data-ondata-on=""区分的方式,但如果你把它当作一个布尔属性,它们都加起来同样的事情反正(仅缺席属性的指示虚假。)

1

是,data-*属性可以作为布尔属性,至少尽可能的DOM和浏览器选择的发动机而言:http://jsfiddle.net/MhJNb/

我还没有完成兼容性测试,而Chrome与应用div[data-on]规则没有问题<div data-on></div>