我有一个功能,可以使用按钮(.grid
)在两个div(.list
和#button
)之间切换。
HTML:
<a href="#" id="button">Change view</a>
<div class="grid">GRID</div>
<div class="list">LIST</div>
jQuery的:
$('.list').hide();
$('.grid').show();
$('#button').toggle(function() {
$('.grid').hide();
$('.list').show();
return false;
}, function() {
$('.list').hide();
$('.grid').show();
return false;
});
如何添加Cookie支持,以便在页面加载后保存并显示切换状态?当用户第一次加载页面时,将显示.grid视图。
我尝试过以前的线程中的许多选项,但都失败了。
答案 0 :(得分:1)
只需设置并获取Cookie的值并相应地切换元素(小提琴:http://jsfiddle.net/bpcJd/1/):
function setCookie(name, value, lifetime_days) {
var exp = new Date();
exp.setDate(new Date().getDate() + lifetime_days);
document.cookie = name + '=' + value + ';expires=' + exp.toUTCString() + ';path=/';
}
function getCookie(name) {
if(document.cookie) {
var regex = new RegExp(escape(name) + '=([^;]*)', 'gm'),
matches = regex.exec(document.cookie);
if(matches) {
return matches[1];
}
}
}
// show list if cookie exists
if(getCookie('showlist')) {
$('.list').show();
$('.grid').hide();
} else {
$('.list').hide();
$('.grid').show();
}
// click handler to toggle elements and handle cookie
$('#button').click(function() {
// check the current state
if($('.list').is(':hidden')) {
// set cookie
setCookie('showlist', '1', 365);
} else {
// delete cookie
setCookie('showlist', '', -1);
}
// toggle
$('.list').toggle();
$('.grid').toggle();
return false;
});
答案 1 :(得分:1)
如果你使用jQuery $.cookie
,这样的东西就可以了:
var $layouts = $('.list, .grid'), // cache objects
$button = $('#button'); // to avoid overhead
$button.click(function(e, className){
e.preventDefault();
if(typeof className != 'undefined')
$('.'+className).hide();
$layouts.toggle();
// set cookie to hold the state
$.cookie('shown_type', ($layouts.eq(0).is(':visible') ? 'list' : 'grid'));
});
// check to see if a cookie exists for the app state
var shown_type = $.cookie('shown_type');
if(shown_type == 'list' || shown_type == 'grid'){
$button.trigger('click', [shown_type]); // yes, a cookie exist, show this layout
} else{
$button.trigger('click', ['list']); // no, a cookie does not exist, show list by default
}
Demo。要测试它是否有效,请单击开关一次将其设置为网格,然后复制URL并打开一个新选项卡,网格应为显示的布局。
答案 2 :(得分:0)
如果你使用jquery cookie plugin,你可以这样做:
var visible = false;
if ($.cookie('grid') === 'true'){
visible = true;
}
$('.list').toggle(!visible);
$('.grid').toggle(visible);
$('#button').click(function(){
$.cookie('grid', $('.grid').is(':visible') , {expires: 365});
$('.grid').toggle();
$('.list').toggle();
});
在这里摆弄:http://jsfiddle.net/aXCSq/
此显示首次列出,然后保存".grid"
在Cookie中的可见性