HTMLCollection과 NodeList의 차이점
document.getElementsByClassName()
; document.querySelectorAll()
; 그러나 HTML에 있는 구조와 필요에 따라 사용해야 하기 때문에 그 중 어느 것도 다른 것보다 낫지 않습니다. 하지만! 각각의 출력을 고려하고 작동 방식을 이해하는 것이 중요합니다.
이론
MDN 문서에 따르면:
getElementsByClassName()은 주어진 클래스 이름이 모두 있는 모든 하위 요소의 배열과 같은 객체를 나타내는 라이브
HTMLCollection
를 반환합니다. querySelectorAll()은 지정된 선택기 그룹과 일치하는 문서의 요소 목록을 나타내는 정적(라이브 아님)
NodeList
을 반환합니다. 즉, 나는 도대체 a
live HTMLCollection
및 a static NodeList
가 무엇을 의미하는지 스스로에게 질문했습니다. 거기에서이 차이점을 더 잘 설명하겠습니다.실습
다음 HTML 구조를 살펴보겠습니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Demo</title>
</head>
<body>
<ul id="list">
<li class="item">First Item</li>
<li class="item">Second Item</li>
<li class="item">Third Item</li>
</ul>
<script src="script.js"></script>
</body>
</html>
이제 위에서 언급한 두 가지 방법으로 클래스 이름
item
으로 항목을 가져옵니다.둘 다 클래스
item
에 필요한 모든 요소를 가져온 것을 볼 수 있습니다. 그러나 반환된 데이터 구조에는 큰 차이가 있습니다.이제 목록에 새
<li>
요소를 추가하고 script.js 파일에 자바스크립트 코드를 추가해 보겠습니다.//get UL element
const list = document.getElementById('list');
//Get items by class name (two ways)
const itemsByClassName = document.getElementsByClassName('item');
const itemsByQuerySelector = document.querySelectorAll('.item');
console.log('First console log', itemsByClassName, itemsByQuerySelector);
//adding the fourth element
list.innerHTML += `<li class="item">Fourth Item</li>`;
console.log('Second console log', itemsByClassName, itemsByQuerySelector);
결과를 보자!
새 항목이 목록에 추가된 것을 볼 수 있지만
HTMLCollection
는 네 번째 항목으로 업데이트되었고 NodeList
는 여전히 처음 세 개의 요소를 가지고 있지만 목록에 변경 사항이 있음을 인식하지 못했습니다. .따라서 이것이
HTMLCollection
가 라이브 데이터 구조이고 NodeList
가 정적 데이터 구조인 큰 이유입니다. 먼저 HTMLCollection
는 메소드로 검색된 항목의 변경 사항을 감지할 때마다 자동으로 업데이트됩니다. 반면에 NodeList
는 HTML에서 발생하는 변경 사항에 관계없이 실행한 순간부터 동일하게 유지됩니다.결론
요약하면 자유롭게 사용하되 이 큰 차이를 고려하여 필요에 따라 어느 것이 더 적합한지 결정하십시오.
자세한 내용은 다음 리소스를 확인하세요.
읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(HTMLCollection과 NodeList의 차이점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jharteaga/difference-between-htmlcollection-and-nodelist-25bp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)