2012-12-18 37 views
1

如何讀取數據屬性的值並檢查屬性是否不存在?缺少.data()的測試結果

例如:

var value = $(selector).data('myData'); 

什麼是檢查data-myData屬性缺失或不包含數據的最可靠的方法是什麼?如果它缺少,我做`value.length',那麼我會得到一個錯誤。

我知道我可以使用hasData()但是,如果數據在那裏,我需要它,看起來效率低於兩次檢查值。

+0

我會簡單地使用它的truethy值。 '如果(值){alert(「它有一個值!」)}'唯一的缺點是如果數據包含falsy值,if將會失敗。這可以通過基於它應該包含的數據的簡單「==」比較來處理。 –

回答

3

我通常只是做:

var value = $(selector).data('myData') || ''; 
           // or || 0; 
           // or || someBackupVariable; 
           // (just depends on what you want/need) 

至少這樣你有一個後備價值,所以當你操作變量value它不會打破它。

jsFiddle Demo

+0

FWIW,這個方法失敗了'false','0'和'「」'值:http://jsfiddle.net/Qr3R7/1/。因此你的答案不能被認爲是正確的。 – VisioN

+0

那麼這就是爲什麼'||'部分很重要,因爲你需要知道你想要什麼作爲備份。在'false/0 /'''的情況下,將其中任何一個作爲默認情況都可以,因爲false會默認爲false。 'var value = $('#test')。data('mydata')||假;也嘗試將其更改爲「真」。 http://jsfiddle.net/Qr3R7/2/ –

+0

@VisioN除非該數據值永遠不會包含這樣的值,或者如果這樣的值在邏輯中意味着錯誤。 –

1

如何獲得這樣的值:

var value = $(selector).data('myData'); 
if (!value) do a hasData() 
+0

@ZoltanToth:感謝您的編輯。 – closure

1

我不認爲這是低效率的,但如果你真的不想讀了兩遍,你應該檢查undefined

value = $(selector).data('myData'); 
if (typeof value === "undefined") { 
    ...