2013-08-02 82 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>