godsplane
@godsplane

Как сократить/улучшить этот код?

const tabsItem = document.querySelectorAll('.media-tab')
const tabNav = document.querySelectorAll('.media-category__item')
tabsItem[0].classList.add('active')
document.addEventListener('click', (e) => {
  const target = e.target.closest('.media-category__item');
  if (target) {
    const dataTarget = target.dataset.category;
    tabNav.forEach(elem => {
      if (!elem.classList.contains('active') && elem === target) {
        elem.classList.add('active')
      } else {
        elem.classList.remove('active')
      }
    })
    tabsItem.forEach(elem => {
      if (!elem.classList.contains('active') && elem.dataset.tab === dataTarget) {
        elem.classList.add('active')
      } else {
        elem.classList.remove('active')
      }
    })

  }
})

Это табы. Мне не нравится, что я сначала добавляю класс кнопке, а потом добавляю класс табу, хотел это как то объединить, но не очень понял как.
Да и вообще как реализация в целом?Готов принять поток чего угодно в свою сторону аргументированно.
Я понимаю что код мал, но возможно у вас есть какие то предложения.
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
document.addEventListener(
  'click',
  (e) => {
    const target = e.target.closest('.media-category__item');
    if (!target) {
      return;
    }
    document.querySelector('.media-category__item.active')?.classList.remove('active');
    target.classList.add('active');
    document.querySelector('.media-tab.active')?.classList.remove('active');
    document.querySelector(`.media-tab[data-tab="${target.dataset.category}"]`)?.classList.add('active');
  },
);
Ответ написан
Ваш ответ на вопрос

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

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