Добавить класс родителю активной ссылки при наличии GET Запроса в URL
Всех приветствую!
Есть самописный фильтр в виде 2х меню, в ссылках которых гет запросы, 1 меню на фильтрацию по году, 2е меню на фильтрацию по номеру месяца. Хочу подсветить родителя активной ссылки если в URL есть соответствующий GET запрос... Структура меню следующая <ul class="news-nav-list"> <li><a href="?y=2022&еще всякие запросы">2022</a></li> <li><a href="?y=2021&еще всякие запросы">2021</a></li> <li><a href="?y=2018&еще всякие запросы">2018</a></li> и т.д. </ul> <ul class="news-nav-list"> <li><a href="?всякие запросы&m=04">Апрель</a></li> <li><a href="?всякие запросы&m=09">Сентябрь</a></li> и т.д. </ul> А хочу например если выбран сентябрь 2021 года, что бы было <ul class="news-nav-list"> <li><a href="?y=2022&еще всякие запросы">2022</a></li> <li class="current-menu-item"><a href="?y=2021&еще всякие запросы">2021</a></li> <li><a href="?y=2018&еще всякие запросы">2018</a></li> и т.д. </ul> <ul class="news-nav-list"> <li><a href="?всякие запросы&m=04">Апрель</a></li> <li class="current-menu-item"><a href="?всякие запросы&m=09">Сентябрь</a></li> и т.д. </ul> Заранее премного благодарен за помощь.. ! |
А что происходит при нажатии на ссылку?
Переход на другую страницу или обновление этой? |
Обновление этой
|
|
Цитата:
Не понимаю |
firsmember,
:-? |
URLSearchParams active link
firsmember,
по ссылке выше с десяток вариантов выделения активной ссылки, ниже один из них, применительно к вашему html. <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .current-menu-item a{ color: red; } </style> </head> <body> <ul class="news-nav-list"> <li><a href="?y=2022&еще всякие запросы">2022</a></li> <li><a href="?y=2021&еще всякие запросы">2021</a></li> <li><a href="?y=2018&еще всякие запросы">2018</a></li> и т.д. </ul> <ul class="news-nav-list"> <li><a href="?всякие запросы&m=04">Апрель</a></li> <li><a href="?всякие запросы&m=09">Сентябрь</a></li> и т.д. </ul> <script> const params = new URLSearchParams("y=2021&m=09"); //const params = new URLSearchParams(location.search); document.querySelectorAll(".news-nav-list li").forEach(li => { let link = li.querySelector("a"); let href = link.href; let url = new URL(href); let search = new URLSearchParams(url.search); li.classList.remove("current-menu-item"); for (const [key, value] of search) if (params.get(key) == value) { li.classList.add("current-menu-item"); break; } }) </script> </body> </html> |
const params = new URLSearchParams(location.search) Добавляет ко всем ссылкам с GET класс активной ссылки если в url оба запроса например ?y=2018&m=09 А если в URL 1 запрос например ?y=2018Тогда класс активной ссылки добавляется к ссылке <li><a href="?y=2018&еще всякие запросы">2018</a></li>и ко всем ссылкам месяцев |
firsmember,
не осилил, что не устраивает в коде? сейчас ваше объяснение из разряда, масло масляное, а надо чтобы масляное. макет пишите, как показано выше с пояснениями. |
firsmember,
какие ключи будем проверять? алгоритм сравнения продумайте, пока такой вариант. <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .current-menu-item a{ color: red; } </style> </head> <body> <ul class="news-nav-list"> <li><a href="?y=2022&еще всякие запросы">2022</a></li> <li><a href="?y=2021&еще всякие запросы">2021</a></li> <li><a href="?y=2018&еще всякие запросы">2018</a></li> и т.д. </ul> <ul class="news-nav-list"> <li><a href="?всякие запросы&m=04">Апрель</a></li> <li><a href="?всякие запросы&m=09">Сентябрь</a></li> и т.д. </ul> <ul class="news-nav-list"> <li><a href="?всякие запросы&m=04">Апрель</a></li> <li><a href="?всякие запросы&m=09&y=2018">тест</a></li> и т.д. </ul> <script> const params = new URLSearchParams("?y=2018&m=09"); //const params = new URLSearchParams(location.search); document.querySelectorAll(".news-nav-list li").forEach(li => { let link = li.querySelector("a"); let href = link.href; let url = new URL(href); let search = new URLSearchParams(url.search); li.classList.remove("current-menu-item"); let add = ["y","m"].every(key => params.get(key) == search.get(key)); if(add) li.classList.add("current-menu-item"); }) </script> </body> </html> |
Часовой пояс GMT +3, время: 04:10. |