使用 jQuery 在两个带有 cookies 的 div 之间切换

发布于 2024-12-04 15:07:46 字数 629 浏览 1 评论 0原文

我有一个使用按钮(#button)在两个 div(.grid.list)之间切换的功能。

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 视图。

我尝试了之前线程中的许多选项,但都失败了。

I have a function for toggling between two divs (.grid and .list) with a button (#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;
});

How can I add cookies support, so that the toggle state is saved and displayed accordingly after page load? When the user loads the page for the first time .grid view shall be displayed.

I have tried many options from the previous threads, but all of them failed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮光之海 2024-12-11 15:07:46

只需设置并获取 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;
});

Just set and get the value of a cookie and toggle the elements accordingly (fiddle: 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;
});
ゃ懵逼小萝莉 2024-12-11 15:07:46

如果你使用 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
}

演示。要测试它是否有效,请单击一次开关将其设置为网格,然后复制 URL 并打开一个新选项卡,网格应该是显示的布局。

If you use jQuery $.cookie, something like this would work:

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. To test if it works click the switch once to set it to grid, then copy the URL and open a new tab, grid should be the shown layout.

兮颜 2024-12-11 15:07:46

如果你使用 jquery cookie 插件 你可以这样做:

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/

这样第一次显示List,然后保存".grid"的可见性 在饼干中

If you use jquery cookie plugin you could do:

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();
});

fiddle here: http://jsfiddle.net/aXCSq/

This display List the first time and then saves the visibility of ".grid" in a cookie

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文