【问题标题】:localStorage, saving a class using toggleClasslocalStorage,使用toggleClass保存一个类
【发布时间】:2015-08-10 12:00:14
【问题描述】:

当谈到 localStorage 时,我似乎一无所知。我想通过切换一个类来设置一种最喜欢一组 div 中的任何 div 的方式。我可以让 toggleClass 在单个 div 上工作并被保存,但 localStorage 将所有 div 保存为收藏夹,而不仅仅是设置了 toggleClass 的那个。显然我错过了一些东西。

jsfiddle simple example

本地存储代码:

if (typeof (localStorage) == 'undefined') {
document.getElementById("result").innerHTML = 'Your browser does not support HTML5 localStorage. Try upgrading.';
} else {
if (localStorage.getItem("fav") != null) {
    getFav = localStorage.fav;
    $(".item").addClass('favorites');
}
}
$(document).ready(function () {
$('.btn').on('click', function () {
    getFav = localStorage.fav;
    //$(".item").removeClass('favorites');
    //localStorage.removeItem('background');
    $(this).closest(".item").toggleClass('favorites');
    if ($(this).closest(".item").hasClass('favorites')) {
    localStorage.setItem('fav', 'favorites');

}else{
    localStorage.removeItem('fav');
}

});
});

问题出在

$(".item").addClass('favorites');

它将类添加到所有 .items 中,显然它不应该。

任何帮助将不胜感激!

【问题讨论】:

  • $(".item").addClass('favorites')"favorite" 类添加到 all "item" 分类元素
  • 我意识到这一点,这就是我寻求代码帮助的原因。我可以单独切换,但不能单独保存在 localStorage 中。

标签: javascript jquery local-storage toggleclass


【解决方案1】:

如果其他答案的问题还不够,这里有一个解决方案,它允许您拥有多个 div,这些 div 在重新加载后将保持状态,而不仅仅是一个。

http://codepen.io/anon/pen/WvmEbX

if (typeof(localStorage) == 'undefined') {
  document.getElementById("result").innerHTML =
    'Your browser does not support HTML5 localStorage. Try upgrading.';
} else {
    $(".item").each(function(i, el) {
      if (localStorage['fav' + i] == 'favorites') {
        $(this).addClass('favorites');
      }
    });
}
$(document).ready(function() {
  $('.btn').on('click', function() {
    var $item = $(this).closest('.item');
    var index = $('.item').index($item);
    $item.toggleClass('favorites');
    if ($item.hasClass('favorites')) {
      localStorage.setItem('fav' + index, 'favorites');
    } else {
      localStorage.removeItem('fav' + index);
    }
  });
});

【讨论】:

    【解决方案2】:

    您有 2 个class HTML divs 尝试使用ID 属性而不是使用class,但请确保您指定了两个不同的IDs,因为当前类正在发生冲突。

    <div id="testOne" class="item">Test
          <div class="holder">
              <button class="btn">Toggle</button>
          </div>
    </div>
    
    
    <div id="testTwo" class="item">Test
          <div class="holder">
              <button class="btn">Toggle</button>
          </div>
    </div>
    

    如您所见,我已将 ID 属性分配给每个属性,现在您需要为特定的 ID 添加样式,这样它们就不会发生冲突。

    【讨论】:

    • 我把这个例子做的很简单。但是在使用中,div会是同一个class,设置不同的ID太麻烦了,因为数量太多了。
    【解决方案3】:

    根据您对之前answer 的回复(ID 太麻烦了)

    这是另一种方法。您可以使用他们的index 作为localStorage 值。 但是item 元素的数量不得更改,并且它们不会更改顺序。

    if (typeof(localStorage) == 'undefined') {
      document.getElementById("result").innerHTML =
        'Your browser does not support HTML5 localStorage. Try upgrading.';
    } else {
      // highlight the selected item
      if (localStorage.getItem("fav") != null) {
        getFav = localStorage.fav;
        $('.item').eq(getFav).addClass('favorites');
      }
    }
    
    $(document).ready(function() {
      $('.btn').on('click', function() {
        getFav = localStorage.fav;
    
        // clear all highlights
        $(".item").removeClass('favorites');
    
        // get the selected item then its index, then store in getFav
        var selectedItem = $(this).closest(".item");
        getFav = $('.item').index(selectedItem);
        selectedItem.toggleClass('favorites');
    
        // store the value in localStorage
        if (selectedItem.hasClass('favorites')) {
          localStorage.setItem('fav', getFav);
        } else {
          localStorage.removeItem('fav');
        }
    
      });
    });
    

    这是一个代码笔:http://codepen.io/anon/pen/pJYroL

    注意如果可以,我真的建议您将 ID 应用于元素。这样会更灵活。 :)

    【讨论】:

    • 感谢您输入的 id 和您的代码。我会考虑的。对我来说,上述代码的问题在于它只允许选择一个“最喜欢的”,而不是 2 个或更多。我不想只在一个上切换类。
    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2016-08-27
    • 2021-12-26
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多