2012-03-29 53 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"));