Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   снова про выделение активных пунктов (https://javascript.ru/forum/jquery/47556-snova-pro-vydelenie-aktivnykh-punktov.html)

yozuul 28.05.2014 14:44

снова про выделение активных пунктов
 
перелапатил кучу страниц, в т.ч. на этом сайте. все выделают сам тег <a>, а мне надо <li>, в котором ссылка находится. вот рабочий вариант
$(function () {                             // когда страница загружена
    $('.sf-menu a').each(function () {    // проходим по нужным нам ссылками
        var location = window.location.href // переменная с адресом страницы
        var link = this.href                // переменная с url ссылки
        var result = location.match(link);  // результат возвращает объект если совпадение найдено и null при обратном

        if(result != null) {                // если НЕ равно null
            $(this).addClass('current');    // добавляем класс
        }
    });
});

но надо чтобы выделялось так <li class="current">

рони 28.05.2014 14:57

Цитата:

Сообщение от yozuul
$(this).addClass('current');

$(this).parent().addClass('current');

yozuul 28.05.2014 15:33

спасибо. только, почему-то, с главной current не удаляется.
только сейчас заметил, когда стили стали отображаться нормально.

рони 28.05.2014 15:41

yozuul,
так неназначайте изначально или удалите принудительно

yozuul 28.05.2014 15:58

дак я и не назначаю. при загрузке главной страницы сюда
<li><a href="/">Главная</a></li>
тег добавляется через скрипт. но при переходе дальше, он не удаляется, как это происходит с другими разделами.

devote 28.05.2014 16:02

$(function () {                             // когда страница загружена
    $('.sf-menu a').each(function () {    // проходим по нужным нам ссылками
        var location = window.location.href // переменная с адресом страницы
        var link = this.href                // переменная с url ссылки
        var result = location.match(link);  // результат возвращает объект если совпадение найдено и null при обратном
 
        if(result != null) {                // если НЕ равно null
            $(this).parent().addClass('current');    // добавляем класс
        } else {
            $(this).parent().removeClass('current');    // удаляем класс
        }
    });
});

yozuul 28.05.2014 16:28

не работает. всё равно на главной висит current

WorM32 28.05.2014 16:42

Правильно, что висит, тк в коде выше главная всегда будет частью какой либо страницы)

Попробуйте так
$(function () {
    $('.sf-menu a').each(function () {
        var location = window.loсation.pathname,
            link = this.pathname;
        $(this).parent().toggleClass('current', location == link);
    });
});

yozuul 28.05.2014 17:18

нет. так вообще не работает.
ну да, видимо условие неверно обрабатывается.

WorM32 28.05.2014 17:21

Цитата:

Сообщение от yozuul (Сообщение 313843)
нет. так вообще не работает.
ну да, видимо условие неверно обрабатывается.

Для полной информации нужно было изначально кусок html с меню предоставить, чтобы не гадать)

рони 28.05.2014 17:27

yozuul,
if(result != null && $(this).attr("href") != "/")

yozuul 28.05.2014 17:58

Цитата:

Сообщение от WorM32 (Сообщение 313846)
Для полной информации нужно было изначально кусок html с меню предоставить, чтобы не гадать)

обычное многоуровневое меню
Цитата:

Сообщение от рони (Сообщение 313849)
yozuul,
if(result != null && $(this).attr("href") != "/")

Так совсем главная выпиливается.
Надо что-то типа:
если главная, то добавляем класс ей, если не главная, то убираем с главной, и далее уже то что есть

рони 28.05.2014 18:09

yozuul,
пробежали по ссылкам -- класса нет добавляем на главную класс

рони 28.05.2014 18:14

yozuul,
$(function () {                             // когда страница загружена
    $('.sf-menu a').each(function () {    // проходим по нужным нам ссылками
        var location = window.location.href // переменная с адресом страницы
        var link = this.href                // переменная с url ссылки
        var result = location.match(link);  // результат возвращает объект если совпадение найдено и null при обратном

        if(result != null) {                // если НЕ равно null
            $(this).parent().addClass('current');    // добавляем класс
        } else {
            $(this).parent().removeClass('current');    // удаляем класс
        }
    });
    $('.current').size() == 2 && $('.current').eq(0).removeClass('current')
});

yozuul 28.05.2014 18:16

онооо. спасибо вам огромнейшее

yozuul 28.05.2014 20:48

чорд. когда в подкатегории находишься
site.ru/cat/sub_cat/
с главной не убирается


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