본 내용은 모던 자바스크립트 Deep Dive - 자바스크립트의 기본 개념과 동작 원리를 토대로 작성하였습니다.
39.2 요소 노드 취득
- HTML의 구조나 내용, 스타일을 동적으로 조작하기 위해서는 요소 노드를 취득해야 함
- DOM은 요소 노드를 취득할 수 있는 다양한 메서드 제공
39.2.1 id를 이용한 요소 노드 취득
- Document.prototype.getElementById
- 인수로 전달한 id 어트리뷰트 값을 갖는 하나의 요소 노드를 탐색하여 반환
- id는 문서 내에서 유일한 값이어야 함
- 여러개가 존재하더라도, 에러가 발생하지는 않으나 첫 번째 요소만을 반환
- 존재하지 않는 경우 null을 반환
39.2.2 태그 이름을 이용한 요소 노드 취득
- Document.prototype/Element.prototype.getElementsByTagName
- Document에 정의되어 있는 메서드의 경우, DOM 전체에서 요소 노드를 탐색하여 반환
- Element에 정의되어 있는 메서드의 경우, 특정 요소의 자손 노드 중에서 요소 노드를 탐색하여 반환
- 인수로 전달한 태그 이름을 갖는 모든 요소 노드들을 DOM 컬렉션 객체인 HTMLCollection으로 반환
- astarisk(*)를 전달하면, 모든 요소 노드들을 취득
- HTMLCollection
- 유사 배열 객체
- 이터러블
39.2.3 class를 이용한 요소 노드 취득
- Document.prototype/Element.prototype.getElementByClassName
- 인수로 전달한 class 이름을 갖는 모든 요소 노드들을 탐색하여 반환
- HTMLCollection 객체로 반환
39.2.4 CSS 선택자를 이용한 요소 노드 취득
- Document.prototype/Element.prototype.querySelector
- 인수로 전달한 CSS 선택자를 만족시키는
- 요소 노드가 여러 개인 경우 첫 번째 요소 노드만 반환
- 요소 노드가 존재하지 않은 경우 null을 반환
- 문법에 맞지 않는 경우 DOMExeption 에러가 발생
- astarisk(*)를 전달하면, 모든 요소 노드들을 취득
- DOM Collection 객체인 NodeList 객체 반환
- NodeList : 유사 배열 객체이면서 이터러블
- getElementBy~ 와 같은 메서드들보다 다소 느림
- 하지만 더 구체적인 조건으로 요소 노드를 취득할 수 있고 일관된 방식으로 요소 노드를 취득 가능
39.2.5 특정 요소 노드를 취득할 수 있는지 확인
- Element.prototype.matches
- 인수로 전달한 CSS 선택자를 통해 특정 요소 노드를 취득할 수 있는지 확인
- 여부를 Boolean으로 반환
39.2.6 HTMLCollection과 NodeList
- 둘 다 여러 개의 결과값을 반환하기 위한 DOM 컬렉션 객체
- 유사 배열 객체이면서 이터러블
- for..of 문으로 순회 가능
- 스프레드 문법을 사용하여 간단히 배열로 변환 가능
- HTMLCollection은 live 객체
- NodeList는 non-live 객체
- 경우에 따라 live 객체로 동작할 때가 있음
HTMLCollection
- getElementsByTagName, getElementsByClassName 메서드가 반환
- 노드 객체의 상태 변화를 실시간으로 반환하는 DOM 컬렉션 객체
- 부작용을 발생시키는 원인이 될 수 있음
- 배열로 변환하여 사용하면, 부작용을 방지하고 유용한 배열의 고차 함수를 사용할 수 있음
NodeList
- HTMLCollection 객체의 부작용을 해결하기 위해 querySelectorAll 메서드를 사용하는 방법이 있음
- NodeList 객체 반환
- 실시간으로 노드 객체의 상태 변경을 반영하지 않는 객체
- childeNodes 프로퍼티가 반환하는 NdoeList 객체는 live 객체로 동작함에 주의
- NodeList 역시 배열로 변환하여 사용하는 것을 권장
'programming study > JavaScript' 카테고리의 다른 글
39장. DOM(4) (0) | 2022.05.10 |
---|---|
39장. DOM(3) (0) | 2022.05.09 |
39장. DOM(1) (0) | 2022.05.07 |
38장. 브라우저의 렌더링 과정(2) (0) | 2022.05.06 |
38장. 브라우저의 렌더링 과정(1) (0) | 2022.05.05 |