#javascript #html
#javascript #HTML
Вопрос:
Я хочу назначить «активный» класс меню. Активный клип выбрасывается, но не удаляется. Я не понимаю, почему вы не удалили. Заранее благодарю тех, кто может помочь. Ошибки нет, меня удивляет, что она не удаляется таким образом
<ul id="avia-menu" class="menu av-main-nav">
<li id="menu-item" class="menu-item">
<a href="home">
<span class="avia-bullet"></span>
<span class="avia-menu-text">Home</span>
<span class="avia-menu-fx">
<span class="avia-arrow-wrap">
<span class="avia-arrow"></span>
</span>
</span>
</a>
</li>
<li id="menu-item" class="menu-item">
<a href="about">
<span class="avia-bullet"></span>
<span class="avia-menu-text">About</span>
<span class="avia-menu-fx">
<span class="avia-arrow-wrap">
<span class="avia-arrow"></span>
</span>
</span>
</a>
</li>
<li id="menu-item" class="menu-item">
<a href="contact">
<span class="avia-bullet"></span>
<span class="avia-menu-text">Contact</span>
<span class="avia-menu-fx">
<span class="avia-arrow-wrap">
<span class="avia-arrow"></span>
</span>
</span>
</a>
</li>
</ul>
function updateMenu(url) {
const active = document.querySelector('#menu-item.active');
if (active !== null) {
active.classList.remove('active');
}
const links = Array.from(document.querySelectorAll('#menu-item'));
links.forEach(function (li) {
let anchor = li.querySelector("a");
if (url.indexOf(anchor.href) > -1) {
li.classList.add("active");
}
});
}
updateMenu(window.location.href);
Комментарии:
1. Я рекомендую вам использовать jQuery, чтобы сделать его более динамичным и простым
2. Это должно сработать, но вы могли бы сэкономить запрос, просто добавив удаление в цикл
if (url.indexOf(anchor.href) > -1) {li.classList.add("active");} else {li.classList.remove('active');}
3. Я не мог знать, потому что информации о моем запросе очень мало. Я буду рад, если вы поможете
4. Можно ли сделать его более динамичным и простым с помощью jquery?
5. Вам не нужен jQuery
Ответ №1:
Вы можете упростить свою функцию, объединив .add("active")
.remove("active")
вызовы и внутри вашего цикла. Это экономит ваш запрос и позволяет избежать ненужного сброса и сброса класса для одного и того же элемента.
Вам также не нужен Array.from()
вызов.
function updateMenu(url) {
const links = document.querySelectorAll('#menu-item');
links.forEach(li => {
let anchor = li.querySelector("a");
if (url.indexOf(anchor.href) > -1) {
li.classList.add("active");
} else {
li.classList.remove("active");
}
});
}
updateMenu(window.location.href);