# DOM Tree

DOM 은 객체 트리로 구조화 되어 있기 때문에 DOM tree 라고 부른다.

image

<!DOCTYPE HTML>
<html>
<head>
  <title>사슴에 관하여</title>
</head>
<body>
  사슴에 관한 진실.
</body>
</html>
1
2
3
4
5
6
7
8
9

HTMLHEAD#text ↵␣␣␣␣TITLE#text 사슴에 관하여#text ↵␣␣#text ↵␣␣BODY#text 사슴에 관한 진실.

# Node Type

  1. Node.ELEMENT_NODE
    • HTML 태그에서 만들어지며, DOM 트리를 구성하는 블록
    • 텍스트 노드를 제외한 태그노드
  2. Node.TEXT_NODE
    • 문자열
    • 자식노드를 가질 수 없는 Leaf Node
    • NewLine , Space
  3. Node.COMMENT_NODE
    • 주석노드는 HTML 에 뭔가 있다면 반드시 DOM 트리에 추가되어야 한다는 규칙에 의해 DOM 에 추가된 것임.
  4. Node.DOCUMENT_NODE
    • DOM 의 진입점
    • Document
  5. Node.DOCUMENT_TYPE_NODE
    • DOCTYPE
  6. Node.DOCUMENT_FRAGMENT_NODE

2, 4, 5, 6 은 더이상 쓰이지 않은 숫자. 7 은 거의 안쓴다고 한다.

# Text Node

# 텍스트 노드 생성의 예외

  1. 역사적인 이유로, <head> 이전의 space / newLine 은 무시됨.
  2. HTML 명세서 -> 모든 컨텐츠는 body 안쪽에 있어야 함
    • </body> 뒤에 무언가를 넣더라도 그 콘텐츠는 자동으로 body 안쪽으로 이동
    • </body> 뒤엔 공백이 있을 수 없다.

# 공백이 없는 텍스트 노드

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

HTMLHEADTITLE#text 사슴에 관하여BODY#text 사슴에 관한 진실.

# 개발자 도구에서의 텍스트 노드 Space/newLine

  • 문자열 양 끝 공백 / 공백만 있는 텍스트 노드
    • 개발자 도구에서 보이지 않는다.
    • 개발자 도구에서 화면을 덜 차지하게 된다.
  • space / newLine 이 만들어내는 공간은 HTML 문서가 브라우저상에서 어떻게 표현되는지 대개는 영향을 끼치지 않음.

# 자동 교정

DOM 생성과정에서 기형적인 HTML 을 자동 교정

TODO HTML 명세서와, 브라우저 렌더링 종류에 따라서 다른 동작이 나오지 않을까?

# 최상위 태그는 항상 <html> 이어야 함

html 이 없는 경우, 문서 최상위에 이를 자동으로 넣어줌

<!--test.html-->
"안녕하세요."
1
2

혹은

<!--test.html-->
<html>
"안녕하세요."
</html>
1
2
3
4

은 브라우저에서 이와 같이 렌더링 된다.

<html>
<head></head>
<body>안녕하세요.</body>
</html>
1
2
3
4

HTMLHEADBODY#text 안녕하세요.

# 닫는 태그가 없는 에러 처리

<p>안녕하세요
<li>엄마
<li>그리고
<li>아빠
1
2
3
4

HTMLHEADBODYP#text 안녕하세요.LI#text 엄마LI#text 그리고LI#text 아빠

# <table> 에는 항상 <tbody> 가 있다.

DOM 명세서 -> 테이블에 반드시 <tbody> 가 있어야 한다.

  • HTML 에서 <tbody> 를 생략할 경우 브라우저가 자동으로 교정해준다.
<table id="table"><tr><td>1</td></tr></table>
1

TABLETBODYTRTD#text 1

# Comment node

<!DOCTYPE HTML>
<html>
<body>
  사슴에 관한 진실.
  <ol>
    <li>사슴은 똑똑합니다.</li>
    <!-- comment -->
    <li>그리고 잔꾀를 잘 부리죠!</li>
  </ol>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11

HTMLHEADBODY#text 사슴에 관한 진실. OL#text ↵␣␣␣␣␣␣LI#text 사슴은 똑똑합니다.#text ↵␣␣␣␣␣␣#comment comment#text ↵␣␣␣␣␣␣LI#text 그리고 잔꾀를 잘 부리죠!#text ↵␣␣␣␣#text ↵␣␣↵

# Reference

  • https://gitlab.com/siots-study/topics/-/wikis/dom
  • DOM tree
  • DOM Search
  • https://www.zerocho.com/category/JavaScript/post/573b4165a54b5e8427432948