Кнопки и блоки с одинаковыми классами

Как можно переписать данный код, чтобы по клику на каждую отдельную кнопку доп классы применялись к конкретным span и span2 в рамках одного блока, а не ко всем элементам во всех блоках?

let divs = document.querySelectorAll('.div');
let btns = document.querySelectorAll('.btn');
let spanGroup = document.querySelectorAll('.span');
let spanGroup2 = document.querySelectorAll('.span2');

btns.forEach(item => {
  item.addEventListener('click', () => {
    spanGroup.forEach(item => {
      item.classList.toggle('span-active');
    })
    spanGroup2.forEach(item => {
      item.classList.toggle('span2-active');
    })
  })
})
.container {
  display: flex;
}

.div {
  height: 150px;
  width: 150px;
  background: green;
  dispaly: flex;
  border: 1px solid black;
  margin: 2px;
}

.span {
  width: 35px;
  height: 15px;
  background: blue;
  display: flex;
  margin: 0 0 10px 0;
}

.span2 {
  width: 35px;
  height: 15px;
  background: purple;
  display: flex;
  margin: 10px 0 0 0;
}

.span-active {
  background: orange;
}

.span2-active {
  background: red;
}
<div class="container">
  <div class="div">
    <span class="span"></span>
    <button class="btn">Button</button>
    <span class="span2"></span>
  </div>
  <div class="div">
    <span class="span"></span>
    <button class="btn">Button</button>
    <span class="span2"></span>
  </div>
  <div class="div">
    <span class="span"></span>
    <button class="btn">Button</button>
    <span class="span2"></span>
  </div>
</div>


Ответы (1 шт):

Автор решения: UModeL

Так как класс меняется одновременно для обоих .span, то правильнее будет менять класс .active у их общего предка, а также немного изменить правила в стилях:

let btns = document.querySelectorAll('.btn');

btns.forEach((item) => {
  item.addEventListener('click', (el) => {
    el.target.closest('.div').classList.toggle('active');
  });
});
.container { display: flex; }

.div {
  margin: 2px;
  dispaly: flex;
  height: 150px; width: 150px;
  border: 1px solid black;
  background: green;
}

.span {
  margin: 0 0 10px 0;
  display: flex;
  height: 15px; width: 35px;
  background: blue;
}
.active .span { background: orange; }

.span2 {
  margin: 10px 0 0 0;
  display: flex;
  height: 15px; width: 35px;
  background: purple;
}
.active .span2 { background: red; }
<div class="container">
  <div class="div">
    <span class="span"></span>
    <button class="btn">Button</button>
    <span class="span2"></span>
  </div>
  <div class="div">
    <span class="span"></span>
    <button class="btn">Button</button>
    <span class="span2"></span>
  </div>
  <div class="div">
    <span class="span"></span>
    <button class="btn">Button</button>
    <span class="span2"></span>
  </div>
</div>

→ Ссылка