예전에 한번 forEach와 index를 사용한 간단한 탭메뉴를 만들었던 적이 있다.
https://happy-hee8.tistory.com/3
그때 더 좋은 코드를 짤 수 있게 된다면 수정을 하러 오겠다고 했는데
새로운 방법으로 코드를 짜게되어 이렇게 작성을 해본다.
이 방법도 저 방법도 나쁘지 않은 방식인 것 같아 새로 글을 작성하기로 했다.
개인적으로 장기적으로 내용이 추가되거나 삭제 등등 유지보수를 해야한다면 이 방법이 더 좋을 것 같다.
이 방법은 탭 버튼과 탭 내용 부분에 각각 id값을 주고,
id값이 같은 탭 버튼과 탭 내용 부분이 활성화가 되는 방식이다.
Javascript 코드
// 탭 버튼과 탭 내용 부분들을 querySelectorAll을 사용해 변수에 담는다.
const tabItem = document.querySelectorAll(".tab__item");
const tabContent = document.querySelectorAll(".tab__content");
// 탭 버튼들을 forEach 문을 통해 한번씩 순회한다.
// 이때 index도 같이 가져온다.
tabItem.forEach((item, index) => {
// 탭 버튼에 클릭 이벤트를 준다.
item.addEventListener("click", (e) => {
// 탭 버튼들을 forEach 문을 통해 한번씩 순회한다.
tabItem.forEach((item) => {
// 탭 버튼들의 active 클래스를 제거한다.
item.classList.remove("active");
});
// 클릭한 index의 탭 버튼에 active 클래스를 추가한다.
tabItem[index].classList.add("active");
// 탭 버튼의 id값을 string으로 가져온다.
const tabItemId = String(item.id);
// 탭 내용 부분들을 forEach 문을 통해 한번씩 순회한다.
tabContent.forEach((item, index) => {
// 탭 내용 부분들 전부 active 클래스를 제거한다.
item.classList.remove("active");
// 탭 내용의 id값을 string으로 가져온다.
const tabContentId = String(item.id);
// 만약 탭 버튼의 id 값과 탭 내용의 id값이 같다면,
// 해당 탭 내용에 active 클래스를 추가한다.
if(tabContentId === tabItemId) {
tabContent[index].classList.add("active");
}
});
});
});
결과물
See the Pen Untitled by dahee kim (@dahee-kim) on CodePen.
다른 사람의 도움 없이 스스로 짜봤던 코드라서인지,
코드가 작동했을 때 꽤나 뿌듯했던 것 같다. 재밌었다! :)
![](https://t1.daumcdn.net/keditor/emoticon/niniz/large/006.gif)
- 끝 -
'Javascript' 카테고리의 다른 글
[Javascript] nullish 병합 연산자 '??' (0) | 2023.08.31 |
---|---|
[Javascript] .padStart()를 사용한 숫자 앞에 0 넣기 (0) | 2023.08.30 |
[Javascript] map 과 filter 를 이용한 문제 풀어보기 (0) | 2023.08.21 |
[Javascript] .map() (0) | 2023.08.21 |
[Javascript] .substring() (0) | 2023.08.16 |