@slavaweb
web-разработчик

Как это лучше запрограммировать?

вот кусок кода:
var toggle = document.querySelectorAll(".faq__accordion-toggle");
var answer = document.querySelectorAll(".faq__accordion-answer");

  toggle[0].addEventListener("click", function (event){
    event.preventDefault();
    console.log("Клик по ссылки");
    if (answer[0].classList.contains("faq__item-answer-show")) {
      answer[0].classList.remove("faq__item-answer-show");
    } 
    else {
       answer[0].classList.add("faq__item-answer-show");
       answer[1].classList.remove("faq__item-answer-show");
       answer[2].classList.remove("faq__item-answer-show");
       answer[3].classList.remove("faq__item-answer-show");
       answer[4].classList.remove("faq__item-answer-show");
       answer[5].classList.remove("faq__item-answer-show");
       answer[6].classList.remove("faq__item-answer-show");
       answer[7].classList.remove("faq__item-answer-show");
       answer[8].classList.remove("faq__item-answer-show");
       answer[9].classList.remove("faq__item-answer-show");
       answer[10].classList.remove("faq__item-answer-show");
       answer[11].classList.remove("faq__item-answer-show");
    }
    });


весь не влез повторяется он 12 раз, обращение к элементу массива с 0 до 11 в первой части, а после else в каждом новом повторении .add перемещается на строчку ниже заменяясь на remove. Так вот как это грамотно запрограммировать???
  • Вопрос задан
  • 250 просмотров
Пригласить эксперта
Ответы на вопрос 4
Symphony
@Symphony Куратор тега JavaScript
for( var i = 11; 0 <= i; i-- ){
    answer[i].classList.remove("faq__item-answer-show");
}
Ответ написан
Rou1997
@Rou1997
var toggle = document.querySelectorAll(".faq__accordion-toggle");
var answer = document.querySelectorAll(".faq__accordion-answer");

  toggle[0].addEventListener("click", function (event){
    event.preventDefault();
    console.log("Клик по ссылки");
    if (answer[0].classList.contains("faq__item-answer-show")) {
      answer[0].classList.remove("faq__item-answer-show");
    } 
    else {
       answer[0].classList.add("faq__item-answer-show");
       for (var i = 1; i <= 11; i++) { //Вот здесь
         answer[i].classList.remove("faq__item-answer-show");
       }
    }
    });
Ответ написан
Комментировать
@slavaweb Автор вопроса
web-разработчик
Нашел решение, вся трудность была в том чтоб NodeList преобразовать в массив. Кому интересно вот решение:
<!DOCTYPE html>
<html>
<head>
	<title>лишки</title>
	<style>
    .nav-list__item {
      cursor: pointer;
      background-color: yellow;
      color: green

    }
    .nav-list {
      width: 150px;
    }
    .nav-list__item-blue {
      color: blue;
      background-color: orangered;
    }
	</style>
</head>
<body>
  <ul class="nav-list">
  	<li class="nav-list__item  nav-list__item-blue">Пункт меню</li>
  	<li class="nav-list__item">Пункт меню</li>
  	<li class="nav-list__item">Пункт меню</li>
  	<li class="nav-list__item">Пункт меню</li>
  	<li class="nav-list__item">Пункт меню</li>
  </ul>
  <script>
  var link = document.querySelectorAll(".nav-list__item");
  var linkArray = Array.prototype.slice.call(link);
  linkArray.forEach(function(item, index, array){
    linkArray[index].addEventListener("click", function(event) { 
      event.preventDefault(); 
      console.log("клик по пункту меню" + [index]);
      if (!link[index].classList.contains("nav-list__item-blue")) {
        link[index].classList.add("nav-list__item-blue");
        for (i=0; i < linkArray.length; i++) {
          if (i !== index) {
          link[i].classList.remove("nav-list__item-blue");
          }
        }
        
      } else {
        link[index].classList.remove("nav-list__item-blue");
      }
    });
  });
  </script>
</body>
</html>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы