CoolHeart
@CoolHeart
Junior FrontEnd developer

Аккордеон меню на чистом JavaScript, как правильно?

Учу JS, попытался написать аккордеон меню, но открывается лишь первый элемент во всем меню, к остальным скрипт почему-то не срабатывает: https://jsfiddle.net/mbfm21cm/3/
Важно все сделать на чистом JS, а так же понять принцип работы и в чем моя ошибка.
  • Вопрос задан
  • 1902 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function toggleSubmenu() {
  const submenu = this.closest('li').querySelector('.rz-child-menu');
  submenu.classList.toggle('opened');
}

const vvOpen = document.querySelectorAll('.rz-open-menu-element');
vvOpen.forEach(n => n.addEventListener('click', toggleSubmenu));

.rz-left-menu ul li ul.rz-child-menu.opened {
  display: block;
}

или, вместо назначения обработчика клика каждому элементу индивидуально, можно применить делегированние:

document.querySelector('.rz-left-menu').addEventListener('click', function(e) {
  if (e.target.classList.contains('rz-open-menu-element')) {
    e.target.closest('li').querySelector('.rz-child-menu').classList.toggle('opened');
  }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
28 нояб. 2024, в 18:46
3000 руб./за проект
28 нояб. 2024, в 17:46
10000 руб./за проект
28 нояб. 2024, в 17:38
12000 руб./за проект