2013-07-25 26 views
0

我使用mmenu的jQuery插件 - http://mmenu.frebsite.nl/jquery.mmenu如何直接跳转到一个子页

我遇到的问题是,当我最初打开菜单,我希望它跳到到具有与当前面包屑最匹配的条目的页面。找到元素不是问题。例如

Vehicles 
    Land 
     Cars 
     Trains 
    Water 
     Dingies 

我找到了想要显示的项目,然后对其执行触发(“open.mm”)。

所以,如果我尝试打开“土地”页面,它的工作原理。它将“交通工具”设置为打开,并且我正在驾驶汽车和火车。

但是,如果我尝试直接打开Cars页面,则什么都不会发生。它在Land和Cars上设置样式,但车辆页面仍然是显示的样式。

直接跳到第三级页面有什么窍门?

回答

0

我想出了一个解决方法。我在我想要打开的菜单中找到该项目,然后沿着菜单树向上走并记录所有节点,并将它们重新编码为堆栈。我想从堆栈中按顺序打开每个菜单,直到我打算打开的菜单。有一些可见的页面滚动,但它确实有效。

// Walk up and build a stack of menu items to open 
    var menuToShow: JQuery = this.sideMenu.find("a[href='" + bestUrlMatch + "']").closest("ul"); 
    var menusToShow: JQuery[] = []; 
    do { 
     menusToShow.push(menuToShow); 
     var linkToParent = menuToShow.find("a.mm-subclose"); 
     menuToShow = null; 
     if (linkToParent.length) { 
      var parentId = linkToParent.attr("href"); 
      menuToShow = this.sideMenu.find(parentId); 
      if (menusToShow.length == 0) { 
       menusToShow = null; 
      } 
     } 
    } while (menuToShow != null) 

    // Open the menu items starting from the root 
    do { 
     menuToShow = menusToShow.pop(); 
     menuToShow.trigger("open.mm"); 
    } while (menusToShow.length > 0) 

请注意,我只需要在页面上第一次打开菜单时执行此操作。如果已经选择了另一个子菜单,我不确定它是否会起作用。

0

该插件会自动检测“选择”之类的最深LI,所以只添加该类到李会做的伎俩:

<ul> 
    <li> 
    <a>Vehicles</a> 
    <ul> 
     <li> 
     <a>Land</a> 
     <ul> 
      <li class="Selected"><a>Cars</a></li> 
     </ul> 
     </li> 
    </ul> 
    </li> 
</ul> 

在下载包有“横子菜单”示例页面具有类似的设置。

我的确同意插件在打开子菜单时应该打开所有“父”菜单,但现在我认为这将是最好的解决方案。

+0

这几乎可行。它确实打开了第三级菜单,但点击标题返回到第二级不会执行任何操作。 – GeekyMonkey

+0

真的吗?当我对下载包中的“水平子菜单”示例进行更改时,它似乎工作正常。 – Fred

+0

好的,我发现了这个问题。代码中存在一个错误,假定每个父代LI也具有class =“Selected”。新版本(3.0.3)现在可以从网站下载。 – Fred