【问题标题】:How do I store multiple divs with toggleClass in localStorage?如何在 localStorage 中使用 toggleClass 存储多个 div?
【发布时间】:2016-10-10 12:09:25
【问题描述】:

我正在尝试将 localStorage 添加到 jQuery 中的 toggleClass 函数中,以便在重新加载或关闭浏览器时,具有 .selected css 类的多个 div 保持 .selected。 toggleClass 似乎工作,但我似乎无法让 localStorage 工作。我做错了什么?

Here's the fiddle.

JS:

$(function(){
  $('.mix').click(function() {
    window.localStorage.setItem('test',$(this).toggleClass('selected'));
  });
  if(localStorage.getItem('test')){
    $(this).toggleClass('selected');
  }
});

HTML:

<div id="box" class="p001 mix">Div 1</div>
<div id="box" class="p002 mix">Div 2</div>

提前致谢。

【问题讨论】:

标签: javascript local-storage toggleclass


【解决方案1】:

您需要唯一标识每个div 元素,在此示例中我使用了data-* 前缀的自定义属性。在页面加载时,您需要迭代对象并定位 key 值设置为 true

的元素

HTML

<div data-id="1" class="p001 mix">Div 1</div>
<div data-id="2" class="p002 mix">Div 2</div>

脚本

$(function() {
    $('.mix').click(function() {
        $(this).toggleClass('selected');
        var lsid = 'test' + this.dataset.id;
        window.localStorage.setItem(lsid, $(this).hasClass('selected'));
    });

    $('.mix').each(function() {
        var lsid = 'test' + this.dataset.id;
        if (localStorage.getItem(lsid) && localStorage.getItem(lsid) == "true") {
            $(this).addClass('selected');
        }
    })
});

Fiddle

注意:HTML 中的标识符必须是唯一的,因此删除了id="box" 并使用基于类的 CSS

【讨论】:

  • 但是它似乎在 IE8、IE9 和 IE10 中不起作用。这些项目未显示,并且在控制台中我收到以下错误消息:“SCRIPT5007:无法获取未定义或空引用的属性 'id'”。你知道怎么解决吗?
  • @dlnkprs 使用$(this).data("id")
  • 谢谢你。也许是一个棘手的问题,但是如果我希望我的用户从一开始就选择所有项目,我会添加一个新按钮和功能来一次选择所有项目(.check-all),这会使所有项目都获得“选中”类。 “check-all”键以“true”进入 localStorage,但是当用户从该列表中取消选择某些内容并刷新或重新打开页面时,“check-all”键会覆盖取消选择的键,使所有项目再次被选中。我正在寻找的东西是否有可能实现?非常感谢您的信息!
猜你喜欢
  • 1970-01-01
  • 2011-02-19
  • 2017-07-13
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多