: className
은 특정 엘리먼트의 클래스 속성의 값을 가져오거나 설정할 수 있다.
classList
는 공백으로 구분된 문자열인 Element.className
을 통해 엘리먼트의 클래스 목록에 접근하는 방식을 대체하는 간편한 방법이다.
//className 이용
const h1 = querySelector("div.hello:first-child h1");
function handleTitleClick() {
if(h1.className === "active") {
h1.className = "";
} else {
h1.className = "active";
}
}
h1.addEventListener("click", handleTitleClick);
//classList 이용
const h1 = querySelector("div.hello:first-child h1");
function handleTitleClick() {
const clickedClass = "clicked";
if(h1.classList.contains("clickedClass")) {
h1.classList.remove(clickedClass);
} else {
h1.classList.add(clickedClass);
}
}
h1.addEventListener("click", handleTitleClick);
add(String)
: 지정한 클래스 값을 추가한다. 만약 추가하려는 클래스가 엘리먼트의 class
속성에 이미 존재한다면 무시한다.
remove(String)
: 지정한 클래스 값을 제거한다.
contains(String)
: 지정한 클래스 값이 엘리먼트의 class
속성에 존재하는지 확인한다.
const h1 = querySelector("div.hello:first-child h1");
function handleTitleClick() {
const clickedClass = "clicked";
if(h1.classList.contains(clickedClass)) {
h1.classList.remove(clickedClass);
} else {
h1.classList.add(clickedClass);
}
}
h1.addEventListener("click", handleTitleClick);
4. ⭐️ toggle(String)
, toggle(String, force)
:
✧String
: 토글하고 싶은 Class의 String형.
✧force
: 껐다, 켰다하는 방식이 아니라, 끄거나 키거나 둘 중 하나만 되는 듯. true
로 설정되어있을 경우 클래스가 추가됨(remove안됨). 반대로 false
로 설정돼있다면 클래스가 제거됨(add안됨).
"If included, turns the toggle into a one way-only operation." - MDN
//1. toggle(String)
const h1 = querySelector("div.hello:first-child h1");
function handleTitleClick() {
//toggle이 울트라 캡짱이야...
h1.classList.toggle("clicked");
}
h1.addEventListener("click", handleTitleClick);
//2. toggle(String, force)
const h1 = querySelector(div.hello:first-child h1);
function handleTitleClick() {
//더 클릭해봐도 변한 그 상태 그대로 유지된다.
h1.classList.toggle("clicked", force);
}
h1.addEventListener("click", handleTitleClick);
참고