比较jquery .data()和String总是false

时间:2014-07-16 14:59:34

标签: javascript jquery

首先是小提琴:http://jsfiddle.net/6d82Q/1/

在我的HTML中,我有:

<div class="myClass" data-status="true"></div>
<div class="myClass" data-status="false"></div>

我想根据状态向div添加一个CSS类:

$('.myClass').each(function()
{ 
    // compare status
    if($(this).data('status') == 'true')
    {
        $(this).addClass('myTrueClass');
    }
    else
    {
        $(this).addClass('myFalseClass');
    }
});

问题是,总是添加myFalseClass。 我的问题是:如何解决问题,为什么会出现问题?

3 个答案:

答案 0 :(得分:4)

尝试,

$('.myClass').each(function()
{ 
    if($(this).data('status'))
    {
        $(this).addClass('myTrueClass');
    }
    else
    {
        $(this).addClass('myFalseClass');
    }
});

由于.data(key)会自动将“true”转换为布尔值。

DEMO

当然,如果你想把这个“真”作为一个字符串,那么只需使用.attr("data-status")

答案 1 :(得分:3)

.data() method将对[data-*]属性执行一些自动转换,这样可以非常方便地将数据传递到客户端。

当您存储将自动转换为布尔值的内容时,您可以使用:

if ($(this).data('status')) {
    ...
} else {
    ...
}

如果您需要确保该值为true,而不仅仅是真值(如值1),那么请务必使用参考比较:

if ($(this).data('status') === true) {
    ...
} else {
    ...
}

顺便说一句,当您只是将一个函数传递给.each()时,没有理由致电.addClass()

$('.myClass').addClass(function () {
    return $(this).data('status') ? 'myTrueClass' : 'myFalseClass';
});

答案 2 :(得分:2)

你必须这样做:

if($(this).data('status') === true)
{
    $('#out').append('true <br>');
}
else
{
    $('#out').append('false <br>');
}

UPDATED FIDDLE