我的菜单有这个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/
答案 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)
加载页面时传递查询参数,并使用它来选择适当的导航项:
<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>
$(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)并使用它来设置活动类。