2012-03-29 111 views
49

我想從HTML DIV元素中檢索布爾類型的數據屬性,但是當字符串轉換爲布爾值時它總是返回false。從jquery中的數據屬性檢索布爾數據

HTML

<div id='test' data-return="true"></div> 

JS

isreturn_str = $('#test').data('return'); 
isreturn = (isreturn_str === 'true'); 
if (isreturn) { 
    document.write("It is true"); 
} else { 
    document.write("It is false"); 
} 

輸出

它是假

http://jsfiddle.net/neilghosh/494wC/

回答

83

jQuery的.data()方法是聰明承認布爾和數值,並將其轉換成他們的母語類型。因此,這將返回布爾true,不"true"

$('#test').data('return'); 

如果你想獲得的原始數據(沒有自動數據轉換),您可以使用.attr()

$('#test').attr("data-return"); 

見工作測試用例在這裏:http://jsfiddle.net/jfriend00/6BA8t/

+10

請確保您的「true」和「false」屬性值是小寫字母,以使其正常工作。 – 2013-12-06 21:43:43

+2

有沒有辦法讓它不區分大小寫,以便MVC兼容? – 2014-03-01 19:29:56

+0

@TomerW - 編號'.data()'和'.attr()',甚至DOM函數'.getAttribute()'都是區分大小寫的。 – jfriend00 2014-03-01 19:41:28

4

jQuery的識別字符串「true」,因爲它是布爾對應(數據屬性的情況下),因此:

typeof isreturn_str; // boolean 

,但你嚴格比較字符串'true'它產生虛假的字符串不一個布爾值。

3

"true"內部轉換爲布爾值(嘗試alert (typeof(isreturn_str))),因此您的===比較在類型檢查時失敗。

你可以稱之爲.toString()

isreturn_str = $('#test').data('return').toString(); 

http://jsfiddle.net/494wC/8/

+0

小提琴的鏈接沒有在這裏打開代碼。你可以看一下嗎? – 2014-04-28 20:50:44

0

我使用jQuery 2.1.0,我必須使用eval

// $('#test').attr("data-return");" doesn't works 
eval($('#test').attr("data-return"));