如何在页面更改时保持子菜单打开

时间:2013-06-19 13:26:41

标签: javascript jquery html css

我的菜单有这个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/

3 个答案:

答案 0 :(得分:2)

可以使用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();
    }
});

答案 1 :(得分:1)

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

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();
});

答案 2 :(得分:0)

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

编辑:如果你刚刚运行JS,你可能能够解析url(window.location.href)并使用它来设置活动类。