【问题标题】:Use jquery to highlight parent when child menu item is active and keep submenu open使用 jquery 在子菜单项处于活动状态时突出显示父项并保持子菜单打开
【发布时间】:2014-12-12 01:21:39
【问题描述】:

我是 jQuery 新手,正在研究一种垂直手风琴式导航,如果有的话,它将突出显示活动页面和父级元素。我几乎让它按照我想要的方式工作,但有一些例外。但是,我确信必须有一种方法可以将所有功能浓缩为一个,我只是不确定如何。

我的大部分页面都位于具有主要默认页面和其他页面的文件夹中。因此,如果我的菜单上有 about 并且它有一个子菜单,则子菜单将打开,about 将使用活动类突出显示。然后,如果您单击 about 文件夹中的页面,about 将保持突出显示,并且子菜单项也将突出显示。您将能够拥有父级链接并仍然切换子菜单。

Here is an example page

我也have a fiddle,但是你看不到所有功能

以下是我想纠正的问题:

  1. 当您登陆主页时,在您单击某个项目之前,不会突出显示任何内容。

  2. 将鼠标悬停在带有箭头的父级链接上时,箭头保持不变 深色而不是白色。无法弄清楚css类 为此。

  3. 单击具有子菜单的父级链接时,子菜单 保持打开状态。但是,如果您使用箭头关闭菜单,则 箭头保持在向下位置而不是向右。

这个函数完成添加一个独立的切换元素

jQuery(document).ready(function($){
    $(function() {  
        // Add a <span> to every .nav-item that has a <ul> inside
        $('#vmenuList li').has('ul').prepend('<span class="nav-click"><i class="icon"></i></span>');
        // Dynamic binding to on 'click'
        $('#vmenuList').on('click', '.nav-click', function(){
            // Toggle the nested nav
            $(this).siblings('.submenu').slideToggle('slow');
            // Toggle the arrow using CSS3 transforms
            $(this).children('.icon').toggleClass('nav-open');
        });
    });
});

这匹配 url 并应用一个活动类

$(function() {
    // this will get the full URL at the address bar
    var url = window.location.href;

    // passes on every "a" tag
    $("#vmenuList a").each(function() {
        // checks if its the same on the address bar
        if (url == (this.href)) {
            $(this).closest("a").addClass("active");
        }
    });
}); 

这会将一个父类添加到最近的父类(如果有的话),以便它也可以突出显示。如果用户在子菜单链接上,它还添加一个开放类以保持子菜单打开。

$(document).ready(function () {
    $(function() {  
        $(".active").closest("#vmenuList > li").addClass("parent open");
    });
});

我也使用 jquery cookie 来记住菜单项,虽然我不确定是否有必要

$(document).ready(function () {
var checkCookie = $.cookie("nav-item");
    if (checkCookie != "") {
        $('#vmenuList > li > a:eq('+checkCookie+')').next().show();
    }
    $('#vmenuList > li > a').click(function(){
        var navIndex = $('#vmenuList > li > a').index(this);
        $.cookie("nav-item", navIndex);
        $('#vmenuList li ul').slideUp();
        if ($(this).next().is(":visible")){
            $(this).next().slideUp();
        } else {
            $(this).next().slideToggle();
        }
        $('#vmenuList li a').removeClass('active');
        $(this).addClass('active');
    });
});

【问题讨论】:

    标签: jquery jquery-ui-accordion


    【解决方案1】:

    让我来一一回答你的问题:

    1. 当您进入主页时,在您点击某个项目之前,不会突出显示任何内容。

    这很可能是因为您的链接与url 变量的输出不同。通过console.log(url) 对其进行测试,你会发现它是否正确。

    我用正确的链接设置了第一个菜单项的 URL,所以你可以在这里看到结果:http://jsfiddle.net/rnccdbs7/2/

    1. 当悬停在带有箭头的父级链接上时,箭头保持为黑色而不是白色。还没有弄清楚这个 css 类。

    这是因为您只针对带有hover 的图标,而不是完整的菜单项,所以请删除它...

    .nav-click:hover .icon { background: url('http://www.goodwin.edu/test/addbutton/rightwhite.png') no-repeat center center; }
    

    ...然后添加它...

    #verticalmenu #vmenuList > li:hover .icon { background: url('http://www.goodwin.edu/test/addbutton/rightwhite.png') no-repeat center center; }
    

    查看实际操作:http://jsfiddle.net/rnccdbs7/1/

    1. 单击具有子菜单的父级链接时,子菜单保持打开状态。但是,如果您使用箭头关闭菜单,箭头将保持在向下位置而不是右侧。

    这实际上是 2 个问题:A.点击父菜单不会折叠它,B.下/右图标状态不会改变。

    以下是这些问题的答案:

    A.菜单未折叠: 看起来主元素的 href 属性具有有效的 url,因此它重定向到该页面,而不是只处理菜单折叠/展开。这适用于您的小提琴示例,因为它的 href 标记中有一个哈希 (#)。

    B.箭头不变:问题源于open / nav-open 类分别保留在li.parenti.icon 上。您必须深入了解您的插件(或脚本),了解折叠/展开状态更改机制的工作原理,并确保在折叠菜单时删除上述类。

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 2016-10-30
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2020-08-02
      • 2012-12-27
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多