我有一个可工作的垂直手风琴菜单,它可以创建一个活动类,并在整个网站的页面之间移动时保存。我遇到的问题是,例如,当我从谷歌转到一个子页面时,手风琴菜单不会下拉并显示该活动类。
当我从一页转到另一页时,我使用cookie来保存类。当我从谷歌搜索时,我会使用类似的技术来捕捉它所在的页面吗?
http://jsfiddle.net/tebrown/uzrbbqx9/4/
$('#cssmenu > li:has(ul)').addClass("has-sub");
var checkCookie = $.cookie("nav-item");
if (checkCookie != "") {
$('#cssmenu > li > a:eq(' + checkCookie + ')').addClass('active').next().show();
}
checkCookie = $.cookie("sub_nav-item");
if (checkCookie != "") {
$('#cssmenu > li > ul > li > a:eq(' + checkCookie + ')').addClass('active').next().show();
}
$('#cssmenu > li > ul > li > a').click(function () {
var navIndex = $('#cssmenu > li > ul > li > a').index(this);
$.cookie("sub_nav-item", navIndex);
var checkElement = $(this).next();
$(this).removeClass('testing');
$(this).closest('li').addClass('testing');
$('#cssmenu li li .active').removeClass('active');
$(this).addClass('active');
});
$('#cssmenu > li > a').click(function () {
var $a = $(this),
$ul = $a.next(),
navIndex = $('#cssmenu > li > a').index(this);
$.cookie("nav-item", navIndex);
$('#cssmenu li a.active').not(this).removeClass('active').next().stop().slideUp();
if ($ul.is(':animated'))
return;
$ul.stop().slideToggle();
$a.toggleClass('active');
});
任何帮助都将不胜感激。
干杯
让我们关注3个解决方案:
Cookie
对我来说最糟糕的解决方案。它有很多有争议的情况:
- 假设我们在A页,然后使用菜单转到B页(仍然可以正常工作)。当我们使用另一个链接(菜单外)返回页面A时会发生什么
- 我们从谷歌访问页面,或者只是在浏览器中更改url-我们如何检测活动页面
窗口位置
通过比较url(window.location==a[href])来检测活动菜单项。
更好,但是。。。
- 我们可以有与菜单链接href没有相同url的页面,但它仍然是本节的子页面。再次——如何检测
硬编码
在每个视图中定义活动菜单项。
这是最好的解决方案,但如果做得不对,也可能是一种痛苦。
答案
回到你的问题-你可以结合最后两种方法。只需获取页面url(窗口位置解决方案的一部分)并创建类似"网站地图"的东西(上一个解决方案的部分,但您在一个js文件中定义它):
{
'url_1': 'active_menu_item',
'url_2': 'another_active_menu_item',
'maybe_some_[regexp]+`: '???',
...
}
或者在视图顶部定义这些变量(checkCookie
和e.q.checkCookieSub
)。
饼干在哪里?对不起,我找不到如何改进这种cookie方法的方法(我们可以用很多方法浏览网站,它们都是无用的,也是最痛苦的):)