className과 classList의 차이
2025. 1. 20. 15:36ㆍ프로그래밍/javascript
728x90
반응형
className과 classList는 둘 다 HTML 요소의 class 속성을 다루는 방법을 제공하지만, 사용하는 방식과 기능 면에서 차이가 있습니다.
1. className
- className은 요소의 class 속성을 문자열 형태로 다루는 프로퍼티입니다.
- 전체 class 값을 한 번에 설정하거나 덮어쓸 때 사용됩니다.
특징:
- 문자열 기반: 요소에 적용된 모든 클래스가 공백으로 구분된 단일 문자열로 나타납니다.
- 덮어쓰기: 값을 설정하면 기존의 클래스를 모두 대체합니다.
- 단순하지만, 개별 클래스를 추가/삭제하거나 상태를 관리하기는 불편합니다.
예제:
<div id="example" class="class1 class2"></div> |
const element = document.getElementById('example'); // 클래스 전체 가져오기 console.log(element.className); // "class1 class2" // 클래스 덮어쓰기 element.className = "newClass"; console.log(element.className); // "newClass" // 기존 클래스 유지하며 추가 element.className += " anotherClass"; console.log(element.className); // "newClass anotherClass" |
2. classList
- classList는 토큰 리스트(DOMTokenList) 객체로, 요소의 class 속성을 배열처럼 다룰 수 있게 합니다.
- 개별 클래스를 추가, 제거, 토글하거나 확인하는 데 적합합니다.
특징:
- 메서드 기반: 클래스를 조작하기 위한 유용한 메서드(add, remove, toggle, contains)를 제공합니다.
- 유연성: 클래스를 하나씩 추가하거나 삭제할 수 있어 상태 관리가 더 직관적입니다.
- 기존 클래스를 덮어쓰지 않고도 쉽게 조작 가능.
메서드:
- add(className): 클래스를 추가. 이미 존재하면 무시.
- remove(className): 클래스를 제거.
- toggle(className): 클래스가 있으면 제거하고, 없으면 추가.
- contains(className): 특정 클래스가 있는지 확인. (true/false 반환)
예제:
<div id="example" class="class1 class2"></div> |
const element = document.getElementById('example'); // 클래스 추가 element.classList.add('newClass'); console.log(element.className); // "class1 class2 newClass" // 클래스 제거 element.classList.remove('class1'); console.log(element.className); // "class2 newClass" // 클래스 토글 element.classList.toggle('class2'); // 제거 console.log(element.className); // "newClass" element.classList.toggle('class2'); // 추가 console.log(element.className); // "newClass class2" // 클래스 포함 여부 확인 console.log(element.classList.contains('class2')); // true console.log(element.classList.contains('class3')); // false |
3. 차이점 요약
특징 | className | classList |
데이터 형식 | 공백으로 구분된 문자열 | DOMTokenList (배열처럼 동작) |
사용 방식 | 전체 class 값을 설정하거나 읽기 | 개별 class를 추가, 삭제, 토글, 확인 가능 |
유연성 | 덮어쓰기가 기본 동작 | 기존 클래스 유지하며 개별 조작 가능 |
주요 메서드 | 없음 | add, remove, toggle, contains |
권장 상황 | 클래스 전체를 설정하거나 읽어야 할 때 | 클래스 개별 조작이 필요하거나 상태를 관리할 때 |
4. 실제 사용 권장
- className: 클래스 전체를 덮어쓰거나 초기화해야 하는 간단한 경우에 사용.
- classList: 동적으로 클래스를 추가, 제거, 상태를 관리해야 하는 경우에 사용.
대부분의 현대 브라우저 환경에서는 classList가 더 강력하고 유연하므로 일반적으로 더 선호됩니다.
728x90
반응형
'프로그래밍 > javascript' 카테고리의 다른 글
DOM 노드와 프로퍼티의 차이 (0) | 2025.01.20 |
---|---|
HTML은 속성, DOM은 프로퍼티 (0) | 2025.01.20 |