从谷歌点击时使子页面处于活动状态



我有一个可工作的垂直手风琴菜单,它可以创建一个活动类,并在整个网站的页面之间移动时保存。我遇到的问题是,例如,当我从谷歌转到一个子页面时,手风琴菜单不会下拉并显示该活动类。

当我从一页转到另一页时,我使用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方法的方法(我们可以用很多方法浏览网站,它们都是无用的,也是最痛苦的):)

最新更新