【问题标题】:jQuery and HTML how to use storage in a dropdown menujQuery 和 HTML 如何在下拉菜单中使用存储
【发布时间】:2020-05-19 16:26:34
【问题描述】:

我有一个问题要问你。

我有一个带有下拉“切换按钮”的侧边栏。代码HTML如下。

<div class="container-fluid">
   <div class="row">
     <nav class="col-md-2 d-none d-md-block bg-dark sidebar">
       <div class="sidebar-sticky">
         <ul class="nav flex-column">
             <li class="nav-item"  id="sidebar">
                 <a class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1" href="#firstSubmenu" data-toggle="collapse"
                 aria-expanded="false" class="dropdown-toggle">Performance Monitoring<span data-feather="plus-circle"></span></a>
                 <ul class="collapse list-unstyled" id="firstSubmenu">
                     <li>
                         <a class="nav-link" href="#">
                             <span data-feather="monitor"></span>
                             Dashboard</a>
                     </li>
                     <li>
                         <a class="nav-link" href="/conto_economico">
                             <span data-feather="trending-up"></span>
                             Conto Economico</a>
                     </li>
                    ....

一切正常,但如果我打开下拉菜单并在更新或更改 url 页面后,下拉菜单会崩溃,我不得不再次打开它。

所以我寻找了一个 jQuery 代码,让我有可能实现我的目标。我认为可以使用localStorage 来记住下拉菜单是否打开,并且在上传页面时给出相同的打开和关闭下拉菜单。

我已经尝试根据我的目标调整代码,但我不擅长 jQuery 代码。我尝试了以下代码,但不起作用

  $("#sidebar li a").on("click", function() {
// get index of parent `<li>` within it's siblings
var container = $(this).closest("li");
var selected_item_index = $("#sidebar li").index(container);
localStorage.setItem("sidebar_selected", selected_item_index);
});

$(function() {
    $("#sidebar li").eq(parseInt(localStorage.getItem("selected_item_index "))).addClass("active").siblings().removeClass('active');
});

【问题讨论】:

    标签: javascript html jquery drop-down-menu


    【解决方案1】:

    您已将容器设置为 li 元素,并且您正试图在一组锚元素中找到它的索引。您需要在 li 元素集中找到索引。像这样

    var container = $(this).closest("li");
    var selected_item_index = $("#sidebar li").index(container);
    

    另外,在使用 setStorage 将 li 类设置为活动后,您可能希望从其他同级元素中删除活动类。此外,用于getstorage 和setstorage 的键名是不同的。它们应该是相同的

     $("#sidebar li").eq(parseInt(localStorage.getItem("sidebar_selected "))).addClass("active").siblings().removeClass('active');
    

    【讨论】:

    • 我已经尝试过您的代码,但仍然无法正常工作。我还根据您的建议更新了我的答案,以检查是否有错误
    • @FedericoDeMarco:你能在上面包含最小 HTML 和 JS 的工作 sn-p 吗?可以这样调试和修复问题
    • Okey @Milind Anantwar 我使用完整的 html 和 JS 进行了编辑。我希望现在可以检查我的错误
    • setstorage 和getstorage 使用的键名不同。应该是一样的
    • 你能更好地解释我修改你的答案吗?
    猜你喜欢
    • 2020-09-03
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多