我遇到了一个我似乎无法识别的问题,代码在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中被错误地写入。但是,当在Ff / Chrome中运行时,此代码非常适用,其中某些ID正确设置为false。
我错过了什么? 谢谢,
答案 0 :(得分: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('; '));
}
答案 1 :(得分: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(', '));
}