связать кнопку и div без id (js vanilla)

109
08 января 2020, 14:30

HTML

<div class="block__buttons">
  <button class="info__button">кнопка 1</button>
  <button class="info__button">кнопка 2</button>
  <button class="info__button">кнопка 3</button>
  <button class="info__button">кнопка 4</button>
  и еще 20 кнопок
</div>
<div class="block__info">
  <div class="info__block display-none">Информация о кнопке 1</div>
  <div class="info__block display-none">Информация о кнопке 2</div>
  <div class="info__block display-none">Информация о кнопке 3</div>
  <div class="info__block display-none">Информация о кнопке 4</div>
  и еще 20 текстов о других кнопках
</div>

логика: при клике на кнопку 1 нужно чтобы к div.info__block в котором информация о кнопке 1, убрался класс display-none. Эта логика должна быть реализована без использования id. И так далее кнопка 2 блок 2, кнопка 3 блок 3. Блоков и кнопок много, поэтому плодить одинаковый код через использование id не хочется

И я не понимаю как связать кнопку и блок без id?

Пожалуйста подскажите как подступиться к проблеме

Answer 1

var buttons = document.querySelectorAll(".block__buttons .info__button"); 
var blocks = document.querySelectorAll(".block__info .info__block"); 
 
buttons.forEach((btn, index) => { 
  btn.addEventListener("click", function(e) { 
    blocks.forEach(bl => bl.classList.add("display-none")); 
    blocks[index].classList.remove("display-none"); 
  }); 
});
.display-none { 
  display: none; 
}
<div class="block__buttons"> 
  <button class="info__button">кнопка 1</button> 
  <button class="info__button">кнопка 2</button> 
  <button class="info__button">кнопка 3</button> 
  <button class="info__button">кнопка 4</button> и еще 20 кнопок 
</div> 
<div class="block__info"> 
  <div class="info__block display-none">Информация о кнопке 1</div> 
  <div class="info__block display-none">Информация о кнопке 2</div> 
  <div class="info__block display-none">Информация о кнопке 3</div> 
  <div class="info__block display-none">Информация о кнопке 4</div> 
  и еще 20 текстов о других кнопках 
</div>

Answer 2

Ребята вот мой ответ на вопрос:

<div class="block__buttons">
   <button class="info__button" id="1">кнопка 1</button>
   <button class="info__button" id="1">кнопка 2</button>
   <button class="info__button" id="1">кнопка 3</button>
   <button class="info__button" id="1">кнопка 4</button>
    и еще 20 кнопок
 </div>
 <div class="block__info">
   <div class="info__block display-none" data-id="1">Информация о кнопке 1</div>
   <div class="info__block display-none" data-id="2">Информация о кнопке 2</div>
   <div class="info__block display-none" data-id="3">Информация о кнопке 3</div>
   <div class="info__block display-none" data-id="4">Информация о кнопке 4</div>
    и еще 20 текстов о других кнопках
 </div>


 const listOaeButtons = document.getElementsByClassName('info__button');
   function show(e) {
    let elem = e.target.id;
    let text = document.getElementsByClassName('info__block-hotel');
        for (let i=0; i < text.length; i++) {
               if (text[i].getAttribute('data-id') == elem) {
                    text[i].classList.remove('display-none');
                  }
                  else { text[i].classList.add('display-none')}
                  }
             }
                for (let i=0; listOaeButtons.length; i++) {
                    listOaeButtons[i].addEventListener('click', show, false);
                }
READ ALSO
Изменение состояние при прокрутке

Изменение состояние при прокрутке

В проекте имеется несколько section'овОдин из них выглядит следующим образом:

141
Django MPTT ошибка с draggable-admin.js

Django MPTT ошибка с draggable-admin.js

Установил django-mptt:

119
Вызов функции JS непонятной конструкции

Вызов функции JS непонятной конструкции

Собственно имеется функция с стороннего ресурса, пример ниже, но у нее непонятная конструкция, как её понимать, и можно ли как то вызвать эту...

92
Наверное я делаю не тот запрос

Наверное я делаю не тот запрос

В таблице есть колонка доктор и колонка назначение лекарств для каждого пациента

122