jquery – 使用$.cookie()的Cookie保存多个面板的折叠状态

前端之家收集整理的这篇文章主要介绍了jquery – 使用$.cookie()的Cookie保存多个面板的折叠状态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试确定如何使用$ .cookie保存可折叠面板的折叠状态。

到目前为止,This的问题一直很有帮助,但仍然缺少最终的解决方案。

目前我发现的任何解决方案只保存了最后一个滚动面板,所以当页面被重新加载时,唯一保存的面板是最后一个。

我需要的是保存所有面向下滚动的面板,而不仅仅是一个。

Link到Github上的jCookie插件

Link在JSFiddle上演示

UPDATE

有人建议LocalStorage是我正在尝试实现的更合适的解决方案。如果您可以评论为什么和什么本地存储将是非常感激。

更新2

因为这样的建议,本地存储将是一个改进,使用cookie这个问题。所选答案是基于此。但是,如罗宾所提到的那样,在HTTPS站点上使用这种技术是有缺点的。

HTML

<div class="panel panel-default">
    <div data-toggle="collapse" data-target="#panel1" class="panel-heading collapsed">
        <h4 class="panel-title">
            <a> Panel 1 </a>
        </h4>
    </div>
    <div id="panel1" class="panel-collapse collapse">
        <div class="panel-body">
        </div>
    </div>
</div>


<div class="panel panel-default">
    <div data-toggle="collapse" data-target="#panel2" class="panel-heading collapsed">
        <h4 class="panel-title">
            <a> Panel 2 </a>
        </h4>
    </div>
    <div id="panel2" class="panel-collapse collapse">
        <div class="panel-body">
        </div>
    </div>
</div>


<div class="panel panel-default">
    <div data-toggle="collapse" data-target="#panel3" class="panel-heading collapsed">
        <h4 class="panel-title">
            <a> Panel 3 </a>
        </h4>
    </div>
    <div id="panel3" class="panel-collapse collapse">
        <div class="panel-body">
        </div>
    </div>
</div>

jQuery的

$(".panel .panel-collapse").on('shown.bs.collapse',function ()
{
    var active = $(this).attr('id');
    $.cookie('activePanelGroup',active);
});

$(".panel .panel-collapse").on('hidden.bs.collapse',function ()
{
    $.removeCookie('activePanelGroup');
});

var last = $.cookie('activePanelGroup');
if (last != null)
{
    //remove default collapse settings
    $(".panel .panel-collapse").removeClass('in');
    //show the account_last visible group
    $("#" + last).addClass("in");
}

解决方法

这将在每个面板显示时创建一个cookie,并在面板隐藏时删除该cookie。
$(".panel .panel-collapse").on('shown.bs.collapse',function ()
{
    var active = $(this).attr('id');
    $.cookie(active,"1");
});

$(".panel .panel-collapse").on('hidden.bs.collapse',function ()
{
    var active = $(this).attr('id');
    $.removeCookie(active);
});

所以,当加载文档时,我们检查每个cookie并展开面板。

$(document.ready(function(){
    var panels=$.cookie(); //get all cookies
    for (var panel in panels){ //<-- panel is the name of the cookie
        if ($("#"+panel).hasClass('panel-collapse')) // check if this is a panel
        {
            $("#"+panel).collapse("show");
        }
    }    
});

使用LOCALSTORAGE

但是,正如有人建议的,使用localStorage可能是一个更好的选择。 localStorage是非常好的。

$(".panel .panel-collapse").on('shown.bs.collapse',function ()
{
    var active = $(this).attr('id');
    var panels= localStorage.panels === undefined ? new Array() : JSON.parse(localStorage.panels);
    if ($.inArray(active,panels)==-1) //check that the element is not in the array
        panels.push(active);
    localStorage.panels=JSON.stringify(panels);
});

$(".panel .panel-collapse").on('hidden.bs.collapse',function ()
{
    var active = $(this).attr('id');
    var panels= localStorage.panels === undefined ? new Array() : JSON.parse(localStorage.panels);
    var elementIndex=$.inArray(active,panels);
    if (elementIndex!==-1) //check the array
    {
        panels.splice(elementIndex,1); //remove item from array        
    }
    localStorage.panels=JSON.stringify(panels); //save array on localStorage
});

加载页面时,请获取localStorage的值并显示面板。

$(document.ready(function(){
    var panels=localStorage.panels === undefined ? new Array() : JSON.parse(localStorage.panels); //get all panels
    for (var i in panels){ //<-- panel is the name of the cookie
        if ($("#"+panels[i]).hasClass('panel-collapse')) // check if this is a panel
        {
            $("#"+panels[i]).collapse("show");
        }
    }  
});

编辑:看到它工作:FIDDLE

猜你在找的jQuery相关文章