본문 바로가기
JavaScript

[JavaScript] DOM

by eddypark 2023. 10. 30.

- 모든 요소와 요소의 어트리뷰트, 텍스트를 각각의 객체로 만들고 이들 객체를 부자 관계를 표현할 수 있는 트리 구조로 구성한 것이다.

- JavaScript를 통해 동적으로 변경할 수 있다.

- HTML 문서에 대한 모델 구성 : HTML 문서를 로드한 후 문서에 대한모델을 객체의 트리(DOM tree)로 메모리에 생성한다.

- HTML 문서 내의 각 요소에 접근 / 수정 : DOM은 각 객체에 접근 및 수정이 가능하며 브라우저를 통해 보게 될 내용 또한 변경된다.

 

(1) DOM tree

- 문서 노드 : DOM tree에 접근하기 위한 시작점(entry point)이다. 트리의 최상위에 존재하며 각각 요소, 어트리뷰트, 텍스트 노드에 접근하려면 문서 노드를 통 해야 한다.

- 요소 노드 : HTML 요소를 표현한다. 부자관계를 가지며 부자 관계를 통해 구조화한다. 어트리뷰트, 텍스트 노드에 접근하려면 먼저 요소 노드를 찾아 접근해야 한다.

- 어트리뷰트 노드 : HTML 요소의 어트리뷰트를 표현한다. 요소의 자식이 아니라 요소의 일부로 표현된다. 요소 노드에 접근하면 어트리뷰트를 참조 및 수정할 수 있다.

- 텍스트 노드 : HTML 요소의 텍스트를 표현한다. 요소 노드의 자식이며 자식 노드를 가질 수 없다. DOM tree의 최종단이다.

<!DOCTYPE html>
<html>
  <head>
    <style>
    </style>
  </head>
  <body>
    <div>
      <h1></h1>
      <ul>
        <li></li>
        <li></li>
      </ul>
    </div>
  </body>
</html>

(2) DOM Query / Traversing (요소에 접근)

- .getElementById(id) : id 어트리뷰트 값으로 요소 노드를 한 개 선택한다. 복수개가 선택된 경우, 첫 번째 요소만 반환한다.

- .querySelector(cssSelector) : CSS 셀렉터를 사용하여 요소 노드를 한 개 선택한다. 복수개가 선택된 경우, 첫 번째 요소만 반환한다.

- .getElementsByClassName(class) : class 어트리뷰트 값으로 요소 노드를 모두 선택한다. 공백으로 구분하여 여러 개의 class를 지정할 수 있다.

- .getElementsByTagName(tagName) : 태그명으로 요소 노드를 모두 선택한다.

- .querySelectorAll(selector) : 지정된 CSS 선택자를 사용하여 요소 노드를 모두 선택한다.

- .parentNode : 부모 노드를 탐색한다.

- .firstChild, lastChild : 자식 노드를 탐색한다.

- .hasChildNodes() : 자식 노드가 있는지 확인한다.

- .childNodes : 자식 노드의 컬렉션을 반환. 텍스트 요소를 포함한 모든 자식 요소를 반환한다.

- .children : 자식 노드의 컬렉션을 반환. 자식 요소 중에서 Element type 요소만을 반환한다.

- .previousSibling, .nextSibling : 형제 노드를 탐색. text node를 포함한 모든 형제 노드를 탐색한다.

- .previousElementSibling, .nextElementSibling : 형제 노드를 탐색. 형제 노드 중에서 Element type 요소만을 탐색한다.

'JavaScript' 카테고리의 다른 글

[JavaScript] Event  (1) 2023.10.31
[JavaScript] 동기식 처리 모델 vs 비동기식 처리 모델  (0) 2023.10.31
[JavaScript] Higher order function  (1) 2023.10.30
[JavaScript] Array  (1) 2023.10.26
[JavaScript] String  (0) 2023.10.26