godsplane
@godsplane

Как избавиться от этой конструкции forEach?

const delegateHandler = (selector, handler) => event => {
  const possibleTarget = event.target.closest(selector)
  if (possibleTarget) {
    event.delegateTarget = possibleTarget
    handler(event)
  }
}

document.addEventListener('click', delegateHandler('.tab-nav_item', (event) => {
  let tabContent = document.querySelectorAll('.tab-content');
  let dataTab = event.delegateTarget.getAttribute('data-tab')

  tabContent.forEach(elem => {
    let dataContent = elem.getAttribute('data-content')
    let navTabs = document.querySelectorAll('.tab-nav_item')
    navTabs.forEach(elem => {
      elem.classList.remove('active')
    });
    event.delegateTarget.classList.add('active')
    if (dataTab == dataContent) {
      elem.classList.add('active')


    } else {
      elem.classList.remove('active')


    }
  })


Сейчас для того чтобы при клике добавить класс к .tab-nav_item и убрать с остальный мне приходится использовать forEach и задавать переменную navTabs
Есть ли какое то решение которое позволит мне добавить класс на event.delegateTarget и убрать эти классы с остальных похожих элементов?
  • Вопрос задан
  • 150 просмотров
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Можно написать код чуть иначе, но принципиально отказаться от итерирования нельзя.
Ответ написан
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
Любая работа с массивами или другими итерируемыми сущностями базируется на циклах, они могут быть присыпаны СС, но внутри все равно будет цикл, даже если пользоваться трюками типа рекурсивного мап - суть не поменяется - цикл, перебор, ветвление...
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если элемент с классом active всегда только один, то можно
document.querySelector('.tab-nav_item.active')?.classList?.remove('active');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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