Аккордеон переключает только первый элемент

У меня есть код ниже в моем index.php, отображается только первый элемент в аккордеоне. Например: когда я нажимаю «Статус» или «Повторно», я ожидаю подменю выбранного элемента, но вместо этого получаю результат из первого списка. Это Позиция.

<style>
  ul .sub_main{
    cursor: pointer;
  }
  .nested {
    display: none;
  }
  .active {
    display: block;
  }

</style>
    <ul class = "sidebar-menu" data-widget = "tree">
      <li class = "header">MANAGE</li>
      
      <li class = "sub_main"><i class = "fa fa-users"></i><span>Positions</span><i class = "fa fa-plus" aria-hidden = "true"></i>
        <ul class = "nested">
          <li class = ""><a href = "#"><i class = "fa fa-users"></i> <span>a link 1</span></a></li>
          <li class = ""><a href = "#"><i class = "fa fa-users"></i> <span>a link 2</span></a></li>
        </ul>
      </li>
      
      <li class = "sub_main"><i class = "fa fa-tasks"></i> <span>Status</span><i class = "fa fa-plus" aria-hidden = "true"></i>
        <ul class = "nested">
          <li class = ""><a href = "#"><i class = "fa fa-tasks"></i> <span>b link 1</span></a></li>
          <li class = ""><a href = "#"><i class = "fa fa-tasks"></i> <span>b link 2</span></a></li>
          <li class = ""><a href = "#"><i class = "fa fa-tasks"></i> <span>b link 3</span></a></li>
        </ul>
      </li>
      <li class = "sub_main"><i class = "fa fa-tasks"></i> <span>Repeated</span><i class = "fa fa-plus" aria-hidden = "true"></i>
        <ul class = "nested">
          <li class = ""><a href = "#"><i class = "fa fa-tasks"></i> <span>c link 1</span></a></li>
          <li class = ""><a href = "#"><i class = "fa fa-tasks"></i> <span>c link 2</span></a></li>
        </ul>
      </li>
    </ul>

это скрипт для отображения элемента аккордеона при нажатии.

var toggler = document.getElementsByClassName("sub_main");
  var i;

  for (i = 0; i < toggler.length; i++) {
    toggler[i].addEventListener("click", function() {
        this.parentElement.querySelector(".nested").classList.toggle("active");
    });
  }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша строка JS с методом переключения класса вызывается для родителя «подосновного» класса. Это означает, что querySelector захватывает первый элемент «.nested», который он находит из вашего элемента ul.sidebar-menu, который всегда будет верхней группой «.nested».

Если вы просто удалите «parentElement» из этой строки JS, тогда querySelector будет искать первый «.nested» внутри элемента «.sub-main» (этот).

Ваш JS должен выглядеть так:

var toggler = document.getElementsByClassName("sub_main");
var i;
for (i = 0; i < toggler.length; i++) {
  toggler[i].addEventListener("click", function() {
    this.querySelector(".nested").classList.toggle("active");
  });
}

Другие вопросы по теме