자바스크립트 classList 사용 방법

원본: classList in JavaScript

웹 사이트에서 버튼을 클릭할 때마다 요소의 상태가 변화하고, 애니메이션이 이루어지고, 사용자의 상호 작용에 따라 스타일이 어떻게 동적으로 변경되는지 궁금하지 않나요?

답은 자바스크립트의 간단하면서도 강력한 기능인 classList 속성에 있습니다.

이 포스트에서는 프론트엔드 개발 기술을 크게 향상시킬 수 있는 자바스크립트의 기본 개념인 classList 속성에 대해 알아보겠습니다.

개념 이해

매력적인 웹 경험 구축에는 스타일이 중요한 요소입니다. 이러한 스타일이 바로 CSS 클래스입니다.

CSS 클래스를 사용하면 미리 정의된 스타일을 여러 요소에 쉽게 적용할 수 있습니다.

여기에 자바스크립트를 사용하면 스타일을 동적으로 관리할 수 있습니다. 이게 바로 classList 속성입니다.

classList.add

add() 메소드는 HTML 요소에 하나 이상의 CSS 클래스를 추가합니다.

이 방법을 사용하면 클래스를 요소에 동적으로 적용하여 웹 페이지의 스타일이나 동작을 변경할 수 있습니다.

다음의 예제를 개발자 도구에서 확인해 보겠습니다:

element.classList.add("bold", "italic", ...);
HTML 예제

이미지와 같은 요소가 있다고 가정해 보겠습니다.

classList.add() 메소드 사용 예제

이 span 요소에 add() 메소드를 사용하여 CSS 클래스를 추가해보겠습니다.

classList.add() 메소드 적용 결과

그럼 위의 이미지처럼 span 요소에 동적으로 CSS 클래스가 추가되었습니다.

예제와 같이 add() 메소드를 사용하면 요소에 클래스를 추가할 수 있으며, 해당 클래스와 관련된 스타일은 CSS에 정의되어 있어야 합니다.

classList.remove

더 이상 사용하지 않는 클래스를 클래스 목록에서 제거해야 하는 경우가 있습니다.

다행히 자바스크립트 메소드로 이 작업을 매우 쉽게 수행할 수 있습니다.

remove() 메소드를 사용하면 해당 요소의 클래스 목록에서 특정 CSS 클래스를 제거할 수 있습니다.

element.classList.remove("bold");

classList.contains

때로는 요소에 특정 클래스가 있는지 확인하여 이를 기반으로 특정 작업을 수행할 수 있습니다.

그냥 contains() 메소드를 사용하여 확인하려는 클래스 이름을 넣으면 간단히 클래스가 있는지 확인할 수 있습니다.

이 메소드의 리턴 값으로 해당 클래스가 있으면 “true”를, 없으면 “false”를 리턴합니다.

console.log(element.classList.contains("bold"));

classList.toggle

요소에 클래스가 존재하는 경우 지우고, 그렇지 않은 경우 추가하는 작업을 위 섹션에서 설명한 세 개의 메소드로 구현할 수 있습니다.

하지만 toggle() 메소드를 사용하면 이 모든 작업을 메소드 하나로 대체할 수 있습니다.

// 클래스가 존재하면 지우고, 아니면 추가
if (element.classList.contains("bold")) {
  element.classList.remove("bold");
} else {
  element.classList.add("bold");
}

// 위와 동일한 기능을 하는 클래스 토글
element.classList.toggle("bold");

하지만 보다 세부적인 제어가 필요한 상황이 발생할 수 있습니다. 예를 들어:

  • 현재 상태에 관계없이 클래스가 항상 추가되도록 하려면 add() 메소드를 사용합니다.
  • 현재 상태에 관계없이 클래스가 항상 제거되도록 하려면 remove() 메소드를 사용합니다.
  • 상태를 변경하지 않고 클래스가 존재하는지만 확인하고 싶다면 contains() 메소드를 사용합니다.

classList.forEach

forEach 메소드는 목록 내의 각 클래스를 모두 반복하고 개별적으로 특별한 작업을 수행할 수 있게 합니다.

const element = document.querySelector('span');

element.classList.add("bold", "italic");

element.classList.forEach((className) => {
  console.log(className);
});
classList.forEach() 메소드 예제

console.log() 메소드로 요소의 추가된 클래스 명을 모두 확인할 수 있습니다.

length, item

length 속성은 특정 요소의 클래스 목록에 포함된 클래스 수를 리턴해 줍니다.

item() 메소드를 사용하면 인덱스를 사용하여 요소의 클래스 목록에서 특정 클래스를 가져올 수 있습니다.

const classCount = element.classList.length;

for (let i = 0; i < classCount; i++) {
    const currentClass = element.classList.item(i);

    console.log(`Class at index ${i}: ${currentClass}`);
}
length, item 예제

정리

이 포스트에서는 classList 속성을 사용하여 CSS 클래스를 추가, 제거, 확인, 토글, 반복하는 등의 작업을 알아봤습니다.

애플리케이션 작성 시 이러한 도구를 자유자재로 사용하면 코드를 더 깔끔하고 관리하기 쉽게 작성할 수 있습니다.

관련 글

자바스크립트 튜토리얼