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

2024-01-30

我正在尝试确定如何使用 $.cookie 保存可折叠面板的折叠状态。

This https://stackoverflow.com/questions/12733238/retain-twitter-bootstrap-collapse-state-on-page-refresh-navigation到目前为止,问题很有帮助,但仍然缺少最终的解决方案。

到目前为止我发现的任何解决方案都只保存了最后一个滚动的面板,因此当重新加载页面时,唯一保存的面板是最后一个面板。

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

Link https://github.com/carhartl/jquery-cookie到 Github 上的 jCookie 插件。

Link http://jsfiddle.net/a7gg70fv/在 JSFiddle 上进行演示


UPDATE

有人建议 LocalStorage 是更适合我想要实现的目标的解决方案。如果您能评论为什么以及本地存储是什么,我们将不胜感激。


UPDATE 2

因为有人建议本地存储将比使用 cookie 更好地解决这个问题。所选答案就是基于此。然而,正如 Robin 所提到的,在 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非常适合这个。

$(".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 http://jsfiddle.net/03u0bfst/3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 $.cookie() 的 cookie 保存多个面板的折叠状态 的相关文章

  • 如何检查元素的内容是否为空,如果是,则在 jquery 中删除该元素

    我目前正在尝试选择某个 div 内没有内容的任何 h2 元素并将其删除 这是我的 html 代码 div class skipToContainer h2 class vidSkipTo Hello h2 h2 class vidSkipT
  • 更改时触发跨度文本/html

    jQuery 或 JavaScript 中是否有任何事件在以下情况下触发span标签 text html 已更改 Code span class user location span user location change functio
  • 如何将当前元素传递给 Knockout.js 绑定中的 Javascript 函数?

    因此 我尝试根据是否选中子复选框 使用 Knockout js 将类添加到元素 为此 我试图通过this作为我的函数的参数 目前 我的精简 DOM 结构如下 tr td td tr
  • 通过 jQuery 从输入类型=“文件”多个中删除文件

    我在使用 PHP 和 jQuery 上传文件时遇到问题 表单可以一次上传多个图像 这些图像可以在滑块中预览 表单还包含两个字段标题和描述 滑块通过 jQuery 工作 当用户通过单击选择文件来选择多个图像时
  • 仅在首页加载时使用 cookie 加载 colorbox

    我尝试了来自网络的参考代码 仅在页面加载时加载特定元素一次 这是示例代码
  • 正则表达式以任何顺序匹配查询中的所有单词

    我正在尝试为一个项目构建一个搜索功能 该功能根据用户搜索输入以及它是否与针对项目列出的关键字匹配来缩小项目范围 为此 我将项目关键字保存在data属性并使用 RegExp 模式将查询与这些关键字进行匹配 我目前正在使用这个表达式 我知道它不
  • 使用 jquery 显示/隐藏特定类的内容

    我是 jquery 的新手 也许这是一个愚蠢的问题 但我几乎到处都在寻找答案 但没有找到 那么 我们开始吧 我想根据我在下拉表单中选择的选项来显示不同的内容 正如我在 StackOverflow 上了解到的 您可以使用更改函数来执行此操作
  • Prototype 和 jQuery 一起?

    我注意到我使用的某个脚本依赖于原型 Lightbox 2 它会与 jQuery 在同一页面上一起工作吗 有没有办法确保它们不发生冲突 你可以 但你需要采取特殊步骤 http docs jquery com Using jQuery with
  • 从 Bootstrap 中删除字形

    如何从 bootstrap 3 中删除所有字形实例 看起来它已经大量嵌入到 css 文件中了 我正在努力使文件大小尽可能最小 只需简单地克隆引导程序https github com twbs bootstrap sass https git
  • 如何同步两个文本框表单值?

    大家好 我是 jQuery 新手 假设我有两个 HTML 文本框 如何才能实现这样的情况 如果我在文本框 A 中写入 则相同的值会转到文本框 B 如果我在 B 中写入 则相同的值会转到 A 与删除文本相同 在 jQuery 中如何做到这一点
  • 删除数据表列中的额外填充

    你好 我创建了 JQuery DataTables 如下所示 所以我的问题是如何删除 图片 列中过多的填充 这就是我初始化表的方式 violators tbl DataTable aoColumnDefs bSortable false a
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 使用 JQuery 更改元素的顺序

    有人知道我做错了什么吗 我正在尝试更改某些图像的显示顺序 我希望每次按下按钮时图像都会向右 向左移动一个位置 这是我尝试过的 但没有运气 任何帮助或见解将不胜感激 rightShift click function img hide var
  • jQuery 获取元素内的鼠标位置

    我希望制作一个控件 用户可以在 div 内单击 然后拖动鼠标 然后松开鼠标以指示他们想要的内容有多长 这是针对日历控件的 因此用户将指示特定事件的时间长度 看起来最好的方法是在父 div 上注册一个 mousedown 事件 而父 div
  • Jquery 验证不能正确验证数字?

    我在使用 jquery 非侵入式验证验证数字时遇到问题 我使用的版本是 ASP NET MVC 3 jQuery 1 9 1 jQuery 用户界面 1 10 1 JQuery 验证 1 11 0 我试图验证的输入是
  • 在 ASP.NET Core MVC 中访问从视图到控制器的隐藏值

    我需要帮助使用 jQuery 从 ASP NET Core razor 视图页面传递隐藏控件值 jQuery 用于获取动态控件选定的值 section scripts
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • 如何从结构中提取索引最高的专业化?

    我正在尝试进行一些模板元编程 并且发现需要 提取 某种类型的某种结构的专门化的最高索引 例如 如果我有一些类型 struct A template
  • 区分 Jersey、Jackson 和 JaxB API

    嗨 我一直在内部使用 Jackson 进行 JSON 处理 我想将这些对象作为 Json 提供给外部 API REST 现在 它们在内部存储为 java 对象 明显的实现是编写某种查询引擎来读取请求 从底层数据存储中检索对象 然后使用 Ja
  • 从 Mercurial 中的单个本地存储库推送到多个远程存储库

    我正在考虑使用 AppHarbor 托管一个轻量级网站 并正在研究他们的 Mercurial 集成 目前我使用 Kiln 作为远程存储库 但目前 AppHarbor 仅支持 BitBucket 集成 一个本地存储库可以有 2 个远程存储库吗
  • ES6 类变量替代方案

    目前 在 ES5 中 我们许多人在框架中使用以下模式来创建类和类变量 这很舒服 ES 5 FrameWork Class variable string variable2 true init function addItem functi
  • 如何删除 Firefox 按钮和链接上的虚线轮廓?

    我可以让 Firefox 不显示丑陋的虚线焦点轮廓links有了这个 a focus outline none 但我怎样才能做到这一点
  • 为什么设置 USER 环境变量需要 12 秒?

    使用以下代码 我经历了可怕的运行时 Option Explicit Dim ShellEnvironment Set ShellEnvironment CreateObject WScript Shell Environment USER
  • UIPopoverController:为什么我的弹出窗口没有出现在我想要的地方?

    简单的 一个视图 我使用presentPopoverFromRect在CGRect中呈现一个UIPopoverController 并且箭头或弹出框都没有出现在我传入的矩形中要求的坐标附近 有什么线索吗 我一直试图自己解决这个问题 但我放弃
  • 从 Java 中的其他类访问私有变量

    如果我想创建一个将人员添加到列表中的表单 我如何从另一个类访问该列表 我应该在哪里定义该列表 以便其他类可以访问成员 大小等 例如 如果我有 Foo 类 它具有适用于我的表单的 GUI 以及用于向列表中添加和删除人员的按钮 那么将列表声明为
  • crosstable() 导出到 csv

    你好 所以我需要制作一个交叉表 我发现有多种方法 但有一个函数可以使表格就像 Excel 中的数据透视表一样 它工作完美 但我无法将其导出到 csv 或 excel 因为它是 Crosstable 类 因此不能强制它 我如何设法将其导出为
  • Spark 按列字数统计

    我们正在尝试在 Spark 中生成数据集的按列统计数据 除了使用统计库中的汇总功能之外 我们正在使用以下程序 我们确定具有字符串值的列 生成整个数据集的键值对 使用列号作为键 列的值作为值 生成新的格式映射 K V gt K V 1 然后我
  • 在 Xcode 9 中运行自定义 shell 脚本“[cp] embed pods Frameworks”

    我刚刚将 cocoapods 更新到最新版本 当前版本是1 3 1 之后 我无法存档该项目 每当我尝试存档该项目时 都会收到以下错误 因此我附上了屏幕截图 你可以去Build Phases然后到 CP Embed Pods Framewor
  • 删除管理对象后核心数据故障

    基本上 我试图在从 a 中删除 a 后访问 a 的一些属性NSManagedObjectContext并保存上下文 问题是 保存上下文后 Core Data 将对象数据标记为错误 并且显然无法恢复它 我创建了一个示例项目来重现该问题 您可以
  • 为什么ApplicationsDocumentsDirectory 对于单元测试返回 null?

    我正在使用 flutter path provider 插件 我需要一个 SQLite 操作 我的错误测试类找不到 getApplicationDocumentsDirectory 并返回 null 该应用程序在模拟器 真实设备上运行 任何
  • PHP XAMPP 服务器 DOCUMENT_ROOT 文件夹结构

    这是我第一次使用 xampp 创建测试站点 我最初将所有 php 文件放在一个文件夹中 最近决定组织数据 是的 事后看来 我应该从一个有组织的文件夹结构开始 无论如何 我的设置如下 表示它是一个文件夹 安装在我的 C 驱动器上 xampp
  • 在 iTextSharp 中将 pdfimportedpage 居中

    我通过 iTextSharp 使用下面的函数将 PDF 附加在一起 它工作正常 唯一的问题是 大于文档设定尺寸 A4 的 PDF 最终会被缩放并放置在文档的左下角 我想将其居中 谁能指出我实现这一目标的正确方向 干杯 private voi
  • WPF。对于多重触发条件,“属性”必须具有非空值

    具有多重触发 其中一个条件不为空 因此如果 StowedAssetDetailedThumbnailViewModel null 则设置模板
  • 更改 Win32 Windows 项目中的默认窗口字体

    我正在使用 C 和 Win32 api 创建 GUI 应用程序 我想知道如何将主窗口的默认字体更改为 thaoma 我有 NET 背景 在 NET中 如果我们更改父控件的字体 那么子控件会自动继承该字体 有没有类似的或者我们需要手动设置每个
  • 性能问题:“java.text.MessageFormat.format”与“StringBuilder”

    我想知道比较MessageFormat or StringBuilder班级 举个例子 我有一个字符串 就性能而言 哪一个更快 java text MessageFormat format or StringBuilder Test app
  • 如何获取 Google Plus 通知数量?

    我正在开发一个 Google Chrome 扩展程序 我想在后台运行的脚本中检索当前用户的 Google 通知计数 是否可以 我在以下位置研究了 Google API https developers google com api http
  • 使用 $.cookie() 的 cookie 保存多个面板的折叠状态

    我正在尝试确定如何使用 cookie 保存可折叠面板的折叠状态 This https stackoverflow com questions 12733238 retain twitter bootstrap collapse state