0

我正在使用 jQuery 的 mmenu 插件——http: //mmenu.frebsite.nl/

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

Vehicles
    Land
        Cars
        Trains
    Water
        Dingies 

我找到要显示的项目,然后对其执行 trigger("open.mm") 。

因此,如果我尝试打开“土地”页面,它会起作用。它将“车辆”设置为打开状态,我在带有汽车和火车的页面上。

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

直接跳转到第三级页面的技巧是什么?

4

2 回答 2

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)

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

于 2013-07-26T18:02:17.867 回答
0

该插件会自动检测具有“Selected”类的最深 LI,因此只需将该类添加到 LI 即可:

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

在下载包中有一个类似设置的“水平子菜单”示例页面。

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

于 2013-07-27T21:08:25.100 回答