Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Подскажите, как выделить активный пункт меню (https://javascript.ru/forum/jquery/12951-podskazhite-kak-vydelit-aktivnyjj-punkt-menyu.html)

maksd 10.11.2010 02:47

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

Итак, есть меню:

<div class="top_menu">
<ul>
<li><a href="/page1/">Страница 1</a></li>
<li><a href="/page2/">Страница 2</a></li>
<li><a href="/page3/">Страница 3</a></li>
</ul>
</div>


Нужно, чтобы при нахождении на страницах, отличных от page1, page2, page3 все выглядело как выше, а при нахождении, к примеру, на странице www.site.tld/page2/ или www.site.tld/page2/subpage/ к li добавлялся нужный класс, т.е.
<li class="current"><a href="/page2/">Страница 2</a></li>


Логика понятна - пропарсить все li из дива с классом top_menu на предмет тега a c атрибутом href, совпадающим с url текущей страницы, и в нужный li добавить класс current. Но ни один из примеров, найденных мной, на моем сайте не заработал (js в браузере включен, jquery подгружен, другие скрипты выполняются корректно).

Т.к. условия таковы, что сайт строится на шаблоне, в котором не обрабатывается php и в котором css во внешнем файле, ничего кроме jquery здесь не поможет. Подскажите, плз, нужный код.

abc_ua 10.11.2010 05:43

Как-то так:
$('div.top_menu li').each(function () {if (this.getElementsByTagName("a")[0].href == location.href) this.className = "current";});

ksa 10.11.2010 08:39

Цитата:

Сообщение от maksd
пропарсить все li из дива с классом top_menu на предмет тега a c атрибутом href, совпадающим с url текущей страницы, и в нужный li добавить класс current

Серверного языка нет совсем? Страницы все статичные?

maksd 11.11.2010 23:47

abc_ua,
спасибо, Ваш код работает, но только для случая нахождения на странице /page2/, на подстраницах - не работает. Подскажите, есть ли возможность проверять не точное соответствие location.href, а наличие в нем?

ksa,
страницы генерятся CMS, а она не обрабатывает никакой серверный язык в шаблонах, так что можно считать, что нет. Сложный случай, я знаю :)

abc_ua 12.11.2010 00:00

попробуйте document.URL

Bercut 12.11.2010 00:17

конкретно для вашего случая подойдёт так
$('DIV.top_menu A').each(function () {
    var re = new RegExp('^' + this.href);
    if(re.test(document.location.pathname)) {
        this.parentNode.className = "current";
    }
});

monolithed 12.11.2010 00:17

Цитата:

Сообщение от abc_ua
попробуйте document.URL

:nono:

как пример:
var array = ["location", "host", "ya.ru/1", "ya.ru/2", "ya.ru/3", "можно", "нельзя"];
var host = window[array[0]][array[1]];

switch(host){
    case array[2] : alert(array[2]);
        break;
    case array[3] : alert(array[3]);
        break;
    case array[4] : alert(array[4]);
        break;
    default : alert('Запускать скрипт на ' + host + ' ' + array[6] + ',\nно ' + array[5] + ' тут:\n' + array[2] + '\n' + array[3] + '\n'+ array[4])
}

Bercut 12.11.2010 00:23

Цитата:

Сообщение от monolithed
как пример:

ну это как-то не универсально - что если там 3 десятка пунктов меню и они пополняются?..
но если для повышения опыта, конечно, зачёт!

abc_ua 12.11.2010 01:06

document.URL не возвратит полный адрес?

corel25 09.08.2011 07:41

А как сделать тоже самое...
 
А как сделать тоже самое... только чтобы class="current" находился не в <li> а в <a href"#" class="current">?


Часовой пояс GMT +3, время: 20:35.