【问题标题】:How to store active class of a div when page reloads using local storage使用本地存储重新加载页面时如何存储 div 的活动类
【发布时间】:2017-02-13 12:09:59
【问题描述】:

我无法在页面重新加载时为 div 保存活动类,当我单击第一个 div 中的按钮时,它的活动类被删除,下一个类被激活。但是当页面在第二个div中重新加载时,如何在页面重新加载时为第二个div保存活动类。我尝试使用本地存储,但我不知道。

<div class="divs active" id="first">
  <h1> first div</h1>
   <a class="btn-link" href="javascript:void(0);" id="btn-first">Next - 2</a>
</div>
<div class="divs" id="second">
 <h1> second div</h1>
  <a class="btn-link" href="javascript:void(0);" id="btn-second"/>Next -3 </a>
</div>
<div class="divs" id="third">
 <h1> third div</h1>
   <a class="btn-link" href="javascript:void(0);" id="btn-third"/>Next -1</a>
</div>

<script>
$(document).ready(function(){

  $('#btn-first').click(function(){
    $('.divs').removeClass('active');
    var activeID = $('#second').addClass('active');
    console.log(activeID);
    localStorage.setItem("activeDIV", activeID);

    //var reloadactiveDIV = localStorage.getItem("activeDIV");

    // var activeID = $('#second');
    // localStorage.setItem('activeTab', $activeID );
    // var activeTab = localStorage.getItem('activeTab');
    // if (activeTab) {
    //     $('.divs').removeClass('active');
    //     $('#second').addClass('active');
    // }
  });

  $('#btn-second').click(function(){
    $('.divs').removeClass('active');
    $('#third').addClass('active');
  });
  $('#btn-third').click(function(){
    $('.divs').removeClass('active');
    $('#first').addClass('active');
  });


});
</script>

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    要实现这一点,您可以将活动 div 的index 存储在本地存储中,而不是整个 jQuery 对象,然后在页面被访问时在 localStorage 索引内的元素上重新设置 active 类下一个加载。

    还请注意,您可以通过对所有按钮使用单个事件处理程序来干掉逻辑。您可以找到父 .divs 并检索下一个,如果没有下一个兄弟,则循环回到第一个。试试这个:

    $(document).ready(function() {
      // set active on click:
      $('.btn-link').click(function(e) {
        e.preventDefault();
        var $parentDiv = $(this).closest('div');
        var $nextDiv = $parentDiv.next('div');
        var $divs = $('.divs').removeClass('active');
    
        if (!$nextDiv.length) 
            $nextDiv = $divs.first();    
    
        $nextDiv.addClass('active');
        localStorage.setItem("activeDiv", $nextDiv.index('.divs'));
      });
    
      // set active on load:
      var activeIndex = localStorage.getItem("activeDiv");
      if (activeIndex)
        $('.divs').removeClass('active').eq(activeIndex).addClass('active')
    });
    

    Working Example

    请注意,我无法在 SO Snippet 中放置一个工作示例,因为它对访问 localStorage 有限制。

    【讨论】:

    • 我更喜欢使用 sessionStorage 而不是 localStorage。会话存储属性为每个给定的源维护一个单独的存储区域,该区域在页面会话期间可用,即只要浏览器打开,包括页面重新加载和恢复。本地存储做同样的事情,但即使在浏览器关闭并重新打开时仍然存在。
    • 你是对的,虽然我不认为这是一个偏好问题。这完全取决于您需要将数据存储多长时间
    猜你喜欢
    • 2020-07-31
    • 2015-11-13
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2021-02-24
    相关资源
    最近更新 更多