Добавить класс родителю активной ссылки при наличии 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, время: 23:22. |