jquery - addClass/removeClass 并保存在 localStorage 中

标签 jquery local-storage

我在页面上有一个切换器,用于向正文标记添加/删除类。单击“夜间”,“夜间”类将添加到正文中,“白天”类将被删除,反之亦然。我还希望将其存储在 localStorage 中,这样如果有人离开页面并返回,相关类仍会添加到正文中。我几乎已经可以工作了。但是,当您返回页面并切换类别时,您需要刷新页面才能更改类别。另外看看我的代码,好像有点啰嗦。我确信是否可以削减并更好地执行。这就是我所拥有的。

HTML

<div class="switcher">
    <p class="day active">Day</p>
    <p class="night">Night</p>
</div>

jQuery

$(".night").click(function(){
    localStorage.setItem('screenModeNightTokenState', 'night');
});

$(".day").click(function(){
    localStorage.setItem('screenModeNightTokenState', 'day');
}); 

if(localStorage.getItem('screenModeNightTokenState') == 'night') {
    $("body").addClass("night");
    $("body").removeClass("day");
}

if(localStorage.getItem('screenModeNightTokenState') == 'day') {
    $("body").addClass("day");
    $("body").removeClass("night");
}

$('.day').click(function() {
    $("body").addClass("day");
    $("body").removeClass("night");
    $(".switcher .day").addClass("active");
    $(".switcher .night").removeClass("active");
});

$(".night").click(function(){
    $("body").addClass("night");
    $("body").removeClass("day");
    $(".switcher .night").addClass("active");
    $(".switcher .day").removeClass("active");
});

这是一个 jsFiddle:https://jsfiddle.net/arvmtz04/

最佳答案

问题是因为您将与在 p 元素上使用的相同类添加到 body 中来切换状态。您可以通过使这些切换的选择器更具限制性来解决此问题,即。 p.night

另请注意,您可以使代码更加简洁,因为您已将两个事件处理程序分别附加到可以合并的切换开关。您还可以仅使用单个类来设置“夜间”状态,并将“白天”状态设置为默认值。试试这个:

<div class="switcher">
  <p class="day active">Day</p>
  <p class="night">Night</p>
</div>
jQuery(document).ready(function($) {
  if (localStorage.getItem('screenModeNightTokenState') == 'night') {
    $("body").addClass("night");
  }

  $('.day').click(function() {
    localStorage.setItem('screenModeNightTokenState', 'day');
    $("body").removeClass("night");
    $('.switcher p.active').removeClass('active');
    $(this).addClass('active');
  });

  $(".night").click(function() {
    localStorage.setItem('screenModeNightTokenState', 'night');
    $("body").addClass("night");
    $('.switcher p.active').removeClass('active');
    $(this).addClass('active');
  });
});
.switcher p {
  cursor: pointer;
}

.switcher .active {
  font-weight: bold;
}

body {
  background-color: #d2f4f7;
}

body.night {
  background-color: #5c3b1b
}

Working example - 这个例子在 fiddle 中工作,因为SO片段不允许访问localStorage

关于jquery - addClass/removeClass 并保存在 localStorage 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57431234/

相关文章:

html - localStorage、sessionStorage、session 和 cookie 有什么区别?

javascript - LocalStorage 或 PHP Sessions 哪个更持久?

jquery - 成功后访问$(this) :function() when using $. ajax

javascript - 从mySQL获取ID并使用php在ajax中设置localstorage

jquery - Tinysort按多个属性排序(超过1个)

javascript - 根据屏幕宽度隐藏链接标题属性 - 不会取消隐藏

javascript - 如何在ReactJs中将变量保存到localStorage

javascript - Phonegap本地存储和面向对象的JS

javascript - setInterval 和 setTimeout 无法正常工作

jquery - 无论标签长度如何,在 Bootstrap 3 中排列单选按钮