Nuboskill
@Nuboskill
Начинающий web developer

Как сделать грамотно добавление класса к активному пункту в меню?

Моих знаний хватило на такой скрипт:
$(document).ready(function(){//addClass
    $('#left-sidebar > ul > li >a').each(function () {
        var domain = 'http://mydomain.ru';
        if(domain + $(this).attr('href') == location.href) $(this).addClass('select');
    });
  });


Однако есть такой нюанс, если перейти куда-то глубже, то меню не будет выделенным (что в принципе и логично, исходя из скрипта).
Например mydomain.ru/auto/ - к меню прибавится класс select, а mydomain.ru/auto/example/ - оставит меню без изменений, то есть активный пункт меню выбран не будет.
Как возможно это исправить?
  • Вопрос задан
  • 360 просмотров
Решения вопроса 2
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Вообще такие вещи на сервере делаются.

if(new RegExp($(this).attr('href')).test(location.href)) {
	$(this).addClass('select');
}
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
var domain = location.protocol + '//' + location.host;
var currentURL = location.href;

$(document).ready(function(){
    $('#left-sidebar > ul > li >a').each(function () {
        if (currentURL.indexOf(domain + $(this).attr('href')) === 0)
        {
            $(this).addClass('select');
        }
    });
  });
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
IonDen
@IonDen
JavaScript developer. IonDen.com
Вообще-то при переходах между разными страницами сайта, подобные классы нужно добавлять на стороне сервера. Так как на стороне клиента будет ощутимый лаг, между загрузкой страницы и конечной подсветкой нужного пункта меню.

Подсветку на стороне клиента делают только для SPA приложений.
Ответ написан
ie6exe
@ie6exe
иногда можно так
$('#left-sidebar>ul>li>a').filter('[href="' + window.location.pathname + '"]').addClass('active');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы