HTML
<div class="class1 class2">element1</div>
<div class="class1 class2">element2</div>
<div class="class1 class2">element3</div>
JS
//클래스가 'class1'이면서 'class2'인 요소들 선택
let getClass = document.querySelectorAll(".class1.class2");
getClass.forEach(element => console.log(element.textContent));
CSS
.green {
color: lightgreen;
}
JS
//실시간으로 상태가 변하는 HTMLCollection의 경우
let getClass = document.getElementsByClassName('class1');
//선택한 요소의 클래스 속성을 'green'으로 변경
//첫 번째 루프를 돌면서 첫 번째 div의 클래스 속성은 'green'으로 변화하기 때문에
//HTMLCollection 객체도 변화, 3개였던 요소가 2개가 되고, 인덱스를 조회할 때 변화가 생긴다.
for(let i = 0; i < getClass.length; i++){
getClass[i].className = 'green';
}
JS
//NodeList의 경우
let getClass = document.querySelectorAll(".class1.class2");
//선택한 요소의 클래스 속성을 'green'으로 변경
for(let i = 0; i < getClass.length; i++){
getClass[i].className = 'green';
}
JS
//부모 노드의 childNodes프로퍼티를 사용한 경우
let parentClass = document.getElementsByClassName("eleParent")[0];
//NodeList반환
let getClass = parentClass.childNodes;
console.log(getClass); //NodeList(7) [text, div.class1.class2, text, div.class1.class2, text, div.class1.class2, text]
//해당 요소의 자식 노드를 삭제
for(let i = 0; i < getClass.length; i++){
parentClass.removeChild(getClass[i]);
}
// 짝수 번째 요소만 제거되었다.
console.log(getClass); //NodeList(3) [div.class1.class2, div.class1.class2, div.class1.class2]
JS
//부모 노드의 childNodes프로퍼티
let parentClass = document.getElementsByClassName("eleParent")[0];
//배열로 변환
let getClass = [...parentClass.childNodes];
console.log(getClass); //(7) [text, div.class1.class2, text, div.class1.class2, text, div.class1.class2, text]
//해당 요소의 자식 노드를 삭제
for(let i = 0; i < getClass.length; i++){
parentClass.removeChild(getClass[i]);
}
//배열은 그대로이지만, 자식 노드들은 제거돼서 더이상 보이지 않는다.
console.log(getClass); //(7) [text, div.class1.class2, text, div.class1.class2, text, div.class1.class2, text]
console.log(parentClass.childNodes); //NodeList []
출처
https://developer.mozilla.org/ko/docs/Web/API/Document_Object_Model/Introduction
이웅모, 모던 자바스크립트 Deep Dive(2021)