@FlapJalc

Как вывести подпункт конкретного пункта в меню?

Реализую меню на JS.

<button class="nav__toggle" type="button">Открыть</button>

<ul class="nav__list">
  <li class="nav__item"><a href="#">Пункт 1</a></li>
  
  <li class="nav__item">
    <a href="#">Пункт 2</a>
    <ul class="nav__sublist">
      <li>Пункт 2.1</li>  
      <li>Пункт 2.2</li>
    </ul> 
  </li>
  
  <li class="nav__item">
    <a href="#">Пункт 3</a>
    <ul class="nav__sublist">
      <li>Пункт 3.1</li>
      <li>Пункт 3.2</li>
    </ul> 
  </li>
  
  <li class="nav__item"><a href="#">Пункт 4</a></li>
  
</ul>

Открытие меню по кнопке реализовал следующим образом:

var navToggle = document.querySelector(".nav__toggle");

navToggle.addEventListener("click", function(event) {
  event.preventDefault();

  var navList = document.querySelector(".nav__list");

  if (!navList.classList.contains("nav--show")) {
    navList.classList.add("nav--show");
  } else {
    navList.classList.remove("nav--show");
  }
});

Действиями выше я отобразил просто пункты меню при клике по кнопке. Но как теперь реализовать открытие подпунктов этого меню?
Решил сделать так: если следующий элемент после тега <a> возвращает НЕ undefined, значит в этом пункте есть подпункт
var navItem = document.querySelectorAll(".nav__item > a");

for (var i = 0; i < navItem.length; i++) {
	if (navItem[i].nextElementSibling != undefined){
	  console.log(navItem[i])
	};
}


Но как мне теперь отображать эти подпункты при клики на них?
https://codepen.io/anon/pen/vwaaqV
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
document.querySelector('.nav__list').addEventListener('click', function(e) {
  const sub = e.target.nextElementSibling;
  if (sub && sub.classList.contains('nav__sublist')) {
    sub.classList.toggle('nav--show');
  }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы