2013-07-25 2 views
0

Я использую MMENU плагин для JQuery - http://mmenu.frebsite.nl/jquery.mmenu, как перейти непосредственно к дочернему странице

Проблема у меня в том, что, когда я сначала открыть меню, я хочу, чтобы перейти на страницу, в которой есть запись, соответствующая текущей паре. Поиск элемента не является проблемой. Например,

Vehicles 
    Land 
     Cars 
     Trains 
    Water 
     Dingies 

Я нахожу его с элементом, который я хочу отобразить, затем на нем запускается («open.mm»).

Так что если я попытаюсь открыть страницу «Земля», она будет работать. Он устанавливает «Транспортные средства» как открытые, и я нахожусь на странице с «Автомобили и поезда».

Однако, если я попытаюсь открыть страницу «Автомобили», то ничего не произойдет. Он устанавливает стили на Land and 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, который имеет класс «Selected», так просто добавить этот класс к 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 также имел класс = «Selected». Новая версия (3.0.3) теперь можно загрузить с веб-сайта. – Fred

Смежные вопросы