0

我有一个我似乎无法识别的问题,代码在 Firefox 和 Chrome 中运行良好,但在 IE 中失败。

我有以下元素的序列:

<tbody id="tbod161-1__" isloaded="true" style="display: none;"></tbody>
<tbody id="tbod162-2__" isloaded="true"></tbody>

我正在尝试创建一个 jQuery cookie,它存储元素是否可见。

function RememberClickedState() {
$('.ms-listviewtable tbody[id^="tbod"]').each(function(){
    tid = $(this).attr('id');
    var tvisible = ($(this).attr('style') == undefined || $(this).attr('style').indexOf('display: none;') == -1);
    var strVisible;
    if( tvisible == true)
    {
        strVisible = "true";
    }
    if( tvisible == false)
    {
        strVisible = "false";
    }
    items += tid+':'+strVisible+';'
})
$.cookie("itemListState", items);
}

当我检索值时:

string = $.cookie("itemListState");
alert(string);

...在 IE 中,所有 ID 都设置为“true”,这意味着这些值被错误地写入了 cookie。但是,此代码在某些 ID 正确设置为 false 的 Ff / Chrome 中运行时可以完美运行。

我错过了什么?谢谢,

4

2 回答 2

2

改变:

var tvisible = ($(this).attr('style') == undefined || $(this).attr('style').indexOf('display: none;') == -1);

进入:

var tvisible = $(this).is(':visible');

我已经改进了你的代码:

function RememberClickedState() {
    $('.ms-listviewtable tbody[id^="tbod"]').each(function(){
        var tvisible = $(this).is(':visible');
        items += $(this).attr('id')+':'+String(tvisible);
    });
    $.cookie("itemListState", items.join('; '));
}
于 2012-08-12T16:23:30.600 回答
1

您可以随时尝试:

function RememberClickedState() {
    var items = '';
    $('.ms-listviewtable tbody[id^="tbod"]').each(function(i, e) {
        items += (e.id + ':' + (e.style.display == 'none'));
    });
    $.cookie("itemListState", items);
}​

小提琴

值之间没有分隔符,我可能会通过这样做添加一个逗号:

function RememberClickedState() {
    var items = [];
    $('.ms-listviewtable tbody[id^="tbod"]').each(function(i, e) {
        items.push(e.id + ':' + (e.style.display == 'none'));
    });
    $.cookie("itemListState", items.join(', '));
}

小提琴

于 2012-08-12T16:25:23.627 回答