Задать вопрос

Табы на js, как правильно?

Полчаса назад кто-то задал вопрос (уже удалил), где показал код на JQ со своей тренировочной реализацией.
Я оставила комментарий, что не очень, т.к. зачем для таких простых вещей использовать JQuery. А потом поймала себя на мысли, что я никогда их на js сама и не делала))) Не приходилось, т.к. сама только учусь.

Повторю его вопрос, как делать правильно, чтобы легко было добавлять/поддерживать и т.п.

https://codepen.io/kris-iris/pen/ZqBEPv?editors=1010

Javascript для табов
class Tabs{
  constructor(){
    this.tabList = document.querySelectorAll('.pageNav__tabItem');
    this.contentList = document.querySelectorAll('.pageNav__contentItem');
    let nav = document.querySelector('.pageNav');
    
    nav.addEventListener('click', e => this.show(e));
    
    this.setIndex();
  }
  
  show(e){
    let t = e.target;
    if (!t.classList.contains('pageNav__tabItem')) return;
    
    this.removePrev();
    
    let index = t.getAttribute('data-index');
    let content = document.querySelector('.pageNav__contentItem[data-index="'+index+'"]');
    
    t.classList.add('pageNav__tabItem--active');
    content.classList.add('pageNav__contentItem--active');
  }
  
  setIndex(){
    for (let i = 0; i < this.tabList.length; i++){
      this.tabList[i].setAttribute('data-index', i);
      this.contentList[i].setAttribute('data-index', i);
    }
  }
  
  removePrev(){
    for (let i = 0; i < this.tabList.length; i++){
      this.tabList[i].classList.remove('pageNav__tabItem--active');
      this.contentList[i].classList.remove('pageNav__contentItem--active');
    }
  }
  
}

document.addEventListener('DOMContentLoaded', ()=>{
  let tabs = new Tabs();
})


Не откажусь от ссылки на пример хорошего кода!
  • Вопрос задан
  • 16072 просмотра
Подписаться 4 Простой 2 комментария
Решение пользователя Никита Егоров К ответам на вопрос (3)