Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Добавить класс родителю активной ссылки при наличии GET Запроса в URL (https://javascript.ru/forum/dom-window/84001-dobavit-klass-roditelyu-aktivnojj-ssylki-pri-nalichii-get-zaprosa-v-url.html)

firsmember 12.05.2022 11:08

Добавить класс родителю активной ссылки при наличии GET Запроса в URL
 
Всех приветствую!
Есть самописный фильтр в виде 2х меню, в ссылках которых гет запросы, 1 меню на фильтрацию по году, 2е меню на фильтрацию по номеру месяца.
Хочу подсветить родителя активной ссылки если в URL есть соответствующий GET запрос...
Структура меню следующая
<ul class="news-nav-list">
  <li><a href="?y=2022&amp;еще всякие запросы">2022</a></li>
  <li><a href="?y=2021&amp;еще всякие запросы">2021</a></li>
  <li><a href="?y=2018&amp;еще всякие запросы">2018</a></li>
 и т.д.
</ul>

<ul class="news-nav-list">	
  <li><a href="?всякие запросы&amp;m=04">Апрель</a></li>
  <li><a href="?всякие запросы&amp;m=09">Сентябрь</a></li>
 и т.д.
</ul>


А хочу например если выбран сентябрь 2021 года, что бы было

<ul class="news-nav-list">
  <li><a href="?y=2022&amp;еще всякие запросы">2022</a></li>
  <li class="current-menu-item"><a href="?y=2021&amp;еще всякие запросы">2021</a></li>
  <li><a href="?y=2018&amp;еще всякие запросы">2018</a></li>
 и т.д.
</ul>

<ul class="news-nav-list">	
  <li><a href="?всякие запросы&amp;m=04">Апрель</a></li>
  <li class="current-menu-item"><a href="?всякие запросы&amp;m=09">Сентябрь</a></li>
 и т.д.
</ul>


Заранее премного благодарен за помощь.. !

voraa 12.05.2022 11:38

А что происходит при нажатии на ссылку?
Переход на другую страницу или обновление этой?

firsmember 13.05.2022 19:06

Обновление этой

рони 13.05.2022 19:22

firsmember,
http://javascript.ru/forum/misc/3852...avascript.html

firsmember 14.05.2022 10:06

Цитата:

Сообщение от рони (Сообщение 545362)

По ссылке спрашивают о страницах, а, как отдельные ссылки связаны с GET Запросами?
Не понимаю

рони 14.05.2022 10:32

firsmember,
:-?

рони 14.05.2022 22:47

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&amp;еще всякие запросы">2022</a></li>
        <li><a href="?y=2021&amp;еще всякие запросы">2021</a></li>
        <li><a href="?y=2018&amp;еще всякие запросы">2018</a></li>
        и т.д.
    </ul>
    <ul class="news-nav-list">
        <li><a href="?всякие запросы&amp;m=04">Апрель</a></li>
        <li><a href="?всякие запросы&amp;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>

firsmember 15.05.2022 05:59

const params = new URLSearchParams(location.search)

Добавляет ко всем ссылкам с GET класс активной ссылки если в url оба запроса например
?y=2018&m=09

А если в URL 1 запрос например
?y=2018
Тогда класс активной ссылки добавляется к ссылке
<li><a href="?y=2018&amp;еще всякие запросы">2018</a></li>
и ко всем ссылкам месяцев

рони 15.05.2022 07:38

firsmember,
не осилил, что не устраивает в коде? сейчас ваше объяснение из разряда, масло масляное, а надо чтобы масляное.
макет пишите, как показано выше с пояснениями.

рони 15.05.2022 08:24

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&amp;еще всякие запросы">2022</a></li>
        <li><a href="?y=2021&amp;еще всякие запросы">2021</a></li>
        <li><a href="?y=2018&amp;еще всякие запросы">2018</a></li>
        и т.д.
    </ul>
    <ul class="news-nav-list">
        <li><a href="?всякие запросы&amp;m=04">Апрель</a></li>
        <li><a href="?всякие запросы&amp;m=09">Сентябрь</a></li>
        и т.д.
    </ul>
    <ul class="news-nav-list">
        <li><a href="?всякие запросы&amp;m=04">Апрель</a></li>
        <li><a href="?всякие запросы&amp;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, время: 17:05.