HTMLCollection
개념
HTMLCollection
은
웹 페이지의 HTML 문서 내에서 선택한 요소만을 문서 내 정렬된 순서대로 모아둔 집합입니다.
흔히 DOM 컬렉션이라 말하는 이 집합은 요소를 배열의 항목처럼 유사하게 다룰 수 있으며, 웹 페이지의 요소를 쉽게 조작할 수 있게 하는 객체입니다.
HTMLCollection
은 유사 배열 객체이면서, for...of
문으로 순회 가능한 이터러블(iterable) 객체입니다.
그리고, DOM의 변경 사항을 실시간(또는 live)으로 반영하는 객체입니다.
length
속성으로 유사 배열 객체인 HTMLCollection
의 길이를 반환할 수 있습니다.
HTMLCollection
객체를 반환하는 메서드
getElementsByTagName()
getElementsByClassName()
알아두세요!
이 두 메서드 이외에도 HTMLCollection
객체을 반환하는 메서드는 더 있습니다. 하지만, 이 두 메서드가 가장 대표적으로 많이 활용하는 메서드입니다.
getElementsByTagName()
문자열로 지정된 태그 이름과 일치하는 모든 요소를 선택하고 HTMLCollection
객체를 반환합니다.
getElementsByClassName()
지정된 클래스 이름과 일치하는 모든 요소를 선택하고 HTMLCollection
객체를 반환합니다.
HTMLCollection
객체를 다루는 방법
위 두 예제를 살펴보면, HTMLCollection
객체를 다룰 때 공통적인 방법으로 다루고 있다는 것을 알 수 있습니다.
HTMLCollection
객체는 아래의 세 가지 방법으로 쉽게 다룰 수 있습니다.
for...of
문으로 순회하는 방법for
문으로 순회하는 방법- 유사 배열을 진짜 배열로 변환하여
forEach()
함수로 순회하는 방법
HTMLCollection
객체의 요소 개수를 다루는 속성
HTMLCollection.length
속성은
HTMLCollection
객체에 포함되어 있는 요소(컬렉션 항목)의 개수를 반환합니다.
HTMLCollection
객체의 특징
HTMLCollection
객체는 유사 배열 객체이면서for...of
문으로 순회 가능한 이터러블(iterable) 객체입니다.HTMLCollection
객체는 DOM의 변경 사항을 실시간(또는 live)으로 반영하는 객체입니다.
유사 배열이면서 순회 가능한 이터러블(iterable) 객체
HTMLCollection
객체는 유사 배열 형태를 가집니다. HTMLCollection
객체는 배열과 유사하게 요소에 인덱스를 사용하여 접근할 수 있고, length
속성을 통해 요소의 수를 확인할 수 있습니다. 그러나 HTMLCollection
객체는 진짜 자바스크립트 배열이 아니라 유사 배열(iterable) 객체입니다.
HTMLCollection
객체는 배열과 유사하게 다룰 수 있지만, 진짜 배열처럼 배열 메서드(push()
, pop()
, forEach()
등)를 사용할 수는 없습니다. 그러나 ES6(ECMAScript 2015) 이후의 자바스크립트에서는 Array.from()
메서드나 스프레드 문법을 사용하여 HTMLCollection
객체를 진짜 배열로 변환할 수 있습니다. 이렇게 변환하면 배열 메서드를 사용할 수 있게 됩니다.
실시간(또는 live) DOM 객체
HTMLCollection
객체는 DOM의 변경 사항을 실시간(또는 live)으로 반영하는 객체입니다. 이는 HTMLCollection
객체가 생성된 후에 DOM이 변경되면 HTMLCollection
객체도 변경된다는 것을 의미합니다. 다시 말해, HTMLCollection
객체는 웹 페이지의 요소를 현재 상태로 실시간으로 반영하는 객체입니다.
다음은 '새로운 메뉴 추가' 버튼을 클릭하면 <ul>
요소에 <li>
요소가 동적으로 추가될 때 document.getElementsByTagName('li')
로 반환된 <li>
요소의 개수 즉, HTMLCollection
객체 항목의 개수가 실시간(또는 live)으로 반영되는 예제입니다.
코드 부연설명
createElement()
함수는 새로운 HTML 요소를 생성해서 반환합니다.
코드 부연설명
appendChild()
함수는 노드를 특정 노드의 마지막 자식으로 추가합니다.
- 김밥
- 라면
- 떡볶이
<li> 요소의 개수: 3
새로운 요소를 추가하면 HTMLCollection
객체도 실시간(또는 live)으로 반영하여 <li>
요소의 개수가 증가하는 것을 확인할 수 있습니다.
이는 DOM의 변경 사항을 실시간(또는 live)으로 반영지 않는 NodeList
객체와는 다른 차이점입니다.
명세서
명세서 사양 | |
---|---|
HTMLCollection
|
DOM Standard #interface-htmlcollection |
브라우저 호환성
객체와 속성 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
HTMLCollection
|
1 | 12 | 1 | 1 |
length
|
1 | 12 | 1 | 1 |
같이 보기
- 자바스크립트 getElementsByTagName() 함수 사용법
- 자바스크립트 getElementsByClassName() 함수 사용법
- 자바스크립트 for…of 문 – 이터러블 객체를 순회하는 반복문
- 자바스크립트 forEach() 함수 – 개념 정리 및 사용 예제
- 자바스크립트 스프레드(…) 문법 – 전개 구문
- 자바스크립트 NodeList 이해하기
- 자바스크립트 HTMLCollection과 NodeList 비교
- HTML <template> 태그 사용 방법
- HTML id 속성 - 올바른 이해와 사용 방법
- HTML class 속성 - 올바른 이해와 사용 방법