Эта статья покажет вам, как изменить раздел вашего веб-сайта в зависимости от элемента, выбранного в меню навигации. Мы напишем код для отображения div с тем же именем, что и выбранный пункт меню.
Вот пример использования JavaScript и HTML:
HTML:
<nav> <a href="#home">Home</a> <a href="#about">About</a> <a href="#services">Services</a> <a href="#contact">Contact</a> </nav> <div id="home">This is the Home section</div> <div id="about">This is the About section</div> <div id="services">This is the Services section</div> <div id="contact">This is the Contact section</div>
JavaScript:
const navLinks = document.querySelectorAll("nav a"); const divs = document.querySelectorAll("div"); navLinks.forEach(link => { link.addEventListener("click", e => { e.preventDefault(); const targetDiv = link.getAttribute("href").substring(1); divs.forEach(div => { if (div.id === targetDiv) { div.style.display = "block"; } else { div.style.display = "none"; } }); }); });
Этот код сначала выбирает все ссылки в элементе nav
и во всех элементах div
на странице, а затем настраивает прослушиватель событий для каждой ссылки, чтобы отображать соответствующий div
при нажатии на ссылку. Метод substring(1)
используется для извлечения значения атрибута href
без символа #
.
Каждый div по-прежнему виден все время, в чем может быть причина?
Причина в том, что для свойства display
установлено значение «блокировать» для всех div при загрузке страницы, и оно не сбрасывается на «none» для всех, кроме целевого div.
Чтобы скрыть все элементы div при загрузке страницы, добавьте этот код перед прослушивателем событий:
divs.forEach(div => { div.style.display = "none"; });
Чтобы блок «Home» был виден по умолчанию, а все остальные — нет, добавьте следующий код:
document.getElementById("home").style.display = "block";
Таким образом, полный код будет выглядеть так:
const navLinks = document.querySelectorAll("nav a"); const divs = document.querySelectorAll("div"); divs.forEach(div => { div.style.display = "none"; }); document.getElementById("home").style.display = "block"; navLinks.forEach(link => { link.addEventListener("click", e => { e.preventDefault(); const targetDiv = link.getAttribute("href").substring(1); divs.forEach(div => { if (div.id === targetDiv) { div.style.display = "block"; } else { div.style.display = "none"; } }); }); });