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.)