【问题标题】:How to keep a submenu open when the page changes页面更改时如何保持子菜单打开
【发布时间】:2013-06-19 13:26:40
【问题描述】:

我的菜单有这个 JS 代码:

$(document).ready(function () {
  $('#nav > li > a').click(function(e){
     if ($(this).attr('class') != 'active'){
       $('#nav li ul').slideUp();
       $(this).next().slideToggle();
       $('#nav li a').removeClass('active');
       $(this).addClass('active');
     }
  });
});

当页面更改时,使子菜单保持打开状态的最佳方法是什么?可能使用 cookie 或会话?

我在这里创建了一个 jsfiddle,所以你可以看到完整的 html 和 css 等:http://jsfiddle.net/bMkEj/

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    可以使用HTML5 LocalStorage来完成。

    在点击处理程序中,将活动菜单文本保存到 localStorage:

    $('#nav > li > a').click(function(e){
       ...
       localStorage.setItem("activeSubMenu", $(this).text());
    });
    

    在页面加载时,阅读 localStorage 并展开菜单(如果找到):

    $(document).ready(function(){
        var activeItem = localStorage.getItem("activeSubMenu");
        if(activeItem){
            $('#nav > li > a').filter(function() {
                return $(this).text() == activeItem;
            }).slideToggle();
        }
    });
    

    【讨论】:

    • 当然 Internet Exploder caniuse.com/#feat=namevalue-storage
    • 如果我们只使用 IE
    • 哦,相信我,我并不关心支持 IE 6 和 7。我只是想向那些必须关心的人指出这一点
    • @MrCode 我想知道在 Windows95 上创建和执行桌面 JavaScript 应用程序会是什么样子...
    • @Ghillied 它可能看起来像omnicognic.com/Support/34/Fatal_Error_Win98.png
    【解决方案2】:

    在加载页面时传递一个查询参数并使用它来选择适当的导航项:

    HTML

    <ul>
        <li id="foo"><a href="index.html?nav=foo">Foo</a>
            <ul>
                <li>Foo 1</li>
                <li>Foo 2</li>
            </ul>
        </li>
        <li id="bar"><a href="index.html?nav=bar">Bar</a>
            <ul>
                <li>Bar 1</li>
                <li>Bar 2</li>
            </ul>
        </li>
        <li id="baz"><a href="index.html?nav=baz">Baz</a>
            <ul>
                <li>Baz 1</li>
                <li>Baz 2</li>
            </ul>
        </li>
    </ul>
    

    JS(假设为 jQuery)

    $(document).ready(function() {
        var query = decodeURIComponent(window.location.search);
        var matches = query.match(/nav=([^&]*)/);
        var id = matches[1];
        $('#' + id + ' ul').slideDown();
    });
    

    【讨论】:

      【解决方案3】:

      如果您正在运行 PHP 或任何其他服务器端语言,您可以将活动类添加到活动元素。

      编辑:如果您只是在运行 JS,您也许可以解析 url (window.location.href) 并使用它来设置活动类。

      【讨论】:

      • 好吧 - 我对 JS 不太好。你有我能看到的例子吗?
      • 取决于您的 URL 的外观。也许var str = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);,如果你的网址是/foo/bar 类型,那么switch(str) (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…) 将类添加到所需的元素。
      • @CharlieFord 这里是great example。玩得开心:)
      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 2016-04-02
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2020-03-24
      相关资源
      最近更新 更多