Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 현재 요소에 활성(active) 클래스 추가하는 방법

웹 페이지에서 탭 메뉴나 버튼 그룹을 만들 때, 클릭된 요소만 시각적으로 강조하는 기능은 매우 자주 사용됩니다. JavaScript를 사용하면 클릭한 현재 요소에 활성(active) 클래스를 동적으로 추가하고, 기존에 활성 상태였던 요소에서는 해당 클래스를 제거할 수 있습니다.

예제 코드

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
    .btn {
        border: none;
        outline: none;
        padding: 10px 16px;
        background-color: #6ea2f0;
        cursor: pointer;
        color: white;
        font-size: 18px;
    }
    .active, .btn:hover {
        background-color: #666;
        color: white;
    }
</style>
</head>
<body>
<h1>Active Button Example</h1>
<div id="sampleDiv">
<button class="btn">Giraffe</button>
<button class="btn active">Cow</button>
<button class="btn">Lion</button>
<button class="btn">Leopard</button>
<button class="btn">Cheetah</button>
</div>
<h2>위 버튼 중 하나를 누르면 해당 버튼에 active 클래스가 설정됩니다</h2>
<script>
    var btns = document.querySelectorAll(".btn");
    Array.from(btns).forEach(item => {
        item.addEventListener("click", () => {
            var selected = document.getElementsByClassName("active");
            selected[0].className = selected[0].className.replace(" active", "");
            item.className += " active";
        });
    });
</script>
</body>
</html>

코드 동작 원리

위 코드가 어떻게 작동하는지 단계별로 살펴보겠습니다.

1. 버튼 요소 선택: document.querySelectorAll(".btn")을 사용하여 페이지 내 모든 .btn 클래스를 가진 버튼을 선택합니다.

2. 이벤트 리스너 등록: Array.from()으로 NodeList를 배열로 변환한 뒤, forEach()를 통해 각 버튼에 클릭 이벤트 리스너를 등록합니다.

3. 기존 활성 클래스 제거: 버튼을 클릭하면 먼저 getElementsByClassName("active")로 현재 활성 상태인 요소를 찾고, replace(" active", "")를 사용해 해당 요소에서 active 클래스를 제거합니다.

4. 새 활성 클래스 추가: 마지막으로 클릭된 버튼에 active 클래스를 추가합니다. CSS의 .active 선택자 덕분에 활성화된 버튼은 배경색이 진회색(#666)으로 변경되어 시각적으로 구별됩니다.

실행 결과

위 코드를 실행하면 다음과 같은 화면이 나타납니다. 초기 상태에서는 'Cow' 버튼에 active 클래스가 미리 적용되어 있습니다.

JavaScript로 현재 요소에 활성(active) 클래스 추가하는 방법

다른 버튼을 클릭하면 기존 버튼의 활성 상태가 해제되고, 클릭한 버튼에 활성 스타일이 적용되는 것을 확인할 수 있습니다.

JavaScript로 현재 요소에 활성(active) 클래스 추가하는 방법

참고: classList API 활용하기

문자열 치환 방식 대신 최신 브라우저에서 지원하는 classList API를 사용하면 더욱 안전하고 간결하게 클래스를 관리할 수 있습니다.

item.addEventListener("click", () => {
    document.querySelector(".btn.active")?.classList.remove("active");
    item.classList.add("active");
});

classList.add(), classList.remove() 메서드는 공백 처리 오류 없이 클래스를 정확하게 추가·제거해 주므로, 실무에서는 이 방식을 사용하는 것이 좋습니다.