본문 바로가기
Javascript study

[JS] DOM 트리

by 카누가 좋아요 2023. 8. 17.

📌 참고 사이트

https://ko.javascript.info/dom-nodes

 

DOM 트리

 

ko.javascript.info

 

http://www.tcpschool.com/javascript/js_dom_node

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 

📋 DOM 트리

문서 객체 모델 (DOM) 에 따르면 모든 HTML 태그와 태그 내의 문자는 객체이다.

 

💡 노드의 종류

HTML DOM은 노드라고 불리는 계층적 단위에 정보를 저장하고 있다.

DOM은 이러한 노드들을 정의하고, 노드들 사이의 관계를 설명하는 역할을 한다.

 

노드 설명
문서 노드 (document node) HTML 문서 전체를 나타내는 노드
요소 노드 (element node) 모든 HTML 요소들은 요소 노드이고, 속성 노드를 가질 수 있는 유일한 노드이다.
속성 노드 (attribute node) 모든 HTML 요소의 속성은 속성 노드이고, 요소 노드에 대한 정보를 가지고 있다. but 해당 노드의 자식 요소에는 포함되지 않는다.
텍스트 노드 (text node) HTML 문서의 모든 텍스트는 텍스트 노드이다.
주석 노드 (comment node) HTML 문서의 모든 주석은 주석 노드이다.

 

 

📍 DOM 예제

 

<!DOCTYPE HTML>
<html>
  <head>
    <title>사슴에 관하여</title>
  </head>
  <body>
    사슴에 관한 진실.
  </body>
</html>

 

DOM은 위 HTML 코드를 아래와 같이 태그를 트리 구조로 표현한다.

 

 

그냥 #text라고 되어 있는 부분은 줄바꿈과 공백이기 때문에 그렇게 나타내었다.

 

태그요소 노드에 해당하고, 트리 구조를 구성한다.

➡️ <html>루트 노드이다.

➡️ <head>와 <body>는 루트 노드의 자식이다.

 

요소 내의 문자텍스트 노드가 된다.

➡️ 텍스트 노드에는 문자열만 담겨 있다.

➡️ 텍스트 노드는 자식 노드를 가질 수 없다. 트리의 끝인 잎 노드가 된다.

➡️ 텍스트 노드에는 새 줄을 의미하는 \n, 공백을 의미하는 ␣ 가 들어가 있다. 이것들도 글자나 숫자처럼 유효한 문자로 취급되므로 텍스트 노드가 된다.

(문자열 양 끝 공백과 공백만 있는 텍스트 노드는 개발자 도구에서 보이지 않는다.)

 

❗ 텍스트 노드 생성의 2가지 예외

1️⃣ 역사적인 이유로 <head> 이전의 공백과 새 줄은 무시된다.

2️⃣ 모든 콘텐츠는 body 안쪽에 있어야 하므로 </body> 뒤로 무언가를 작성하더라도 그 콘텐츠는 자동으로 body 안쪽으로 옮겨진다. 따라서 </body> 뒤에는 공백이 존재하지 않는다.

 

공백 없이 텍스트 노드만으로 HTML 문서를 구성하기 위해서는 HTML을 아래와 같이 작성해야 한다.

 

<!DOCTYPE HTML>
<html><head><title>사슴에 관하여</title></head><body>사슴에 관한 진실.</body></html>

 

 

 

📋 자동 교정

기형적인 HTML을 만나면 브라우저는 DOM 생성 과정에서 HTML을 자동으로 교정한다.

즉, DOM 생성 과정에서 브라우저는 문서에 있는 에러, 닫는 태그가 없는 에러 등을 자동으로 처리한다.

(표를 만들 때 HTML에서 <tbody>를 생략해 놓았더라도 브라우저는 자동으로 DOM에 <tbody>를 만들어 준다.

 

 

 

📋 기타 노드 타입

➡️ 주석 노드

comment로 표현되며, 화면 출력물에는 영향을 주지 않지만 HTML에 뭔가가 있다면 반드시 DOM 트리에 추가되어야 한다는 규칙 때문에 DOM에 추가된다.

 

➡️ <!DOCTYPE html>

HTML 문서 최상단의 <!DOCTYPE...> 지시자 또한 DOM 노드가 된다.

이 노드는 DOM 트리의 <html> 바로 앞에 위치한다.

(위 그림에서 그리지는 않았지만 존재하는 노드이다.)

 

➡️ document 

DOM의 진입점이자 문서 전체를 나타내는 document 객체 또한 DOM 노드이다.

댓글