제이브루스크립트 HTML DOM 탐색
- 이전 페이지 DOM 이벤트 리스너
- 다음 페이지 DOM 노드
HTML DOM을 통해 노드 관계를 사용하여 노드 트리를 탐색할 수 있습니다.
DOM 노드
W3C HTML DOM 표준에 따르면, HTML 문서의 모든 것이 노드입니다:
- 전체 문서는 문서 노드입니다.
- 모든 HTML 요소는 요소 노드입니다.
- HTML 요소 내의 텍스트는 텍스트 노드입니다.
- 모든 HTML 속성은 속성 노드입니다.
- 모든 주석은 주석 노드입니다.

HTML DOM을 통해 노드 트리의 모든 노드를 JavaScript로 접근할 수 있습니다.
새 노드를 생성할 수 있으며, 모든 노드를 수정하고 제거할 수 있습니다.
노드 관계
노드 트리의 노드는 서로 간에 일정한 등급 관계가 있습니다.
- 용어(부모, 자식, 동생, parent, child 및 sibling)는 이러한 관계를 설명하는 데 사용됩니다.
- 노드 트리에서 최상단 노드는 루트(루트 노드)라고 합니다.
- 모든 노드는 부모 노드를 가지지만, 루트(루트 노드는 부모 노드가 없습니다).
- 노드는 일정한 수의 자식을 가질 수 있습니다.
- 동생(형제나 여동생)은 같은 부모를 가진 노드를 의미합니다.
<html> <head> <title>DOM 강의</title> </head> <body> <h1>DOM 첫 번째 강의</h1> <p>Hello world!</p> </body> </html>

위의 HTML에서 다음 정보를 읽을 수 있습니다:
- html은 루트 노드입니다.
- html은 부모가 없습니다.
- html은 head와 body의 부모입니다.
- head는 html의 첫 번째 자식입니다.
- <body>는 <html>의 마지막 자식입니다
또한:
- <head>는 자식으로 <title>를 가지고 있습니다
- <title>는 자식을 하나 가지고 있습니다(텍스트 노드): "DOM 교본"
- <body>는 두 자식을 가지고 있습니다:<h1>와 <p>
- <h1>은 자식으로 "DOM 첫 번째 강의"를 가지고 있습니다
- <p>은 자식으로 "Hello world!"을 가지고 있습니다
- <h1>와 <p>는 형제 노드입니다
노드 간 탐색
JavaScript를 통해 노드 간을 탐색할 수 있는 다음 노드 속성을 사용할 수 있습니다:
- parentNode
- childNodes[nodenumber]
- firstChild
- lastChild
- nextSibling
- previousSibling
자식 노드와 노드 값
DOM 처리 중에 일반적인 오류는 요소 노드에 텍스트가 포함되어 있다고 생각하는 것입니다.
예제:
<title id="demo">DOM 교본</title>
(위 예제에서의)요소 노드 <title> 포함하지 않습니다텍스트입니다.
이는 "DOM 교본" 값을 포함하고 있습니다.텍스트 노드을 통해 가져올 수 있습니다.
텍스트 노드의 값은 노드의 innerHTML
속성을 통해 접근할 수 있습니다:
var myTitle = document.getElementById("demo").innerHTML;
innerHTML 속성에 접근하는 것은 첫 번째 자식 노드에 접근하는 것과 동일합니다: nodeValue
:
var myTitle = document.getElementById("demo").firstChild.nodeValue;
처음 자식 노드에 접근하는 방법은 다음과 같습니다:
var myTitle = document.getElementById("demo").childNodes[0].nodeValue;
다음 세 가지 예제에서 가져오기: <h1>
요소의 텍스트를 복사하여 <p>
요소 내에서:
예제 1
<html> <body> <h1 id="id01">제한적인 첫 페이지</h1> <p id="id02">안녕하세요!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").innerHTML; </script> </body> </html>
예제 2
<html> <body> <h1 id="id01">제한적인 첫 페이지</h1> <p id="id02">안녕하세요!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue; </script> </body> </html>
예제 3
<html> <body> <h1 id="id01">제한적인 첫 페이지</h1> <p id="id02">안녕하세요!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue; </script> </body> </html>
InnerHTML
이 튜토리얼에서는 innerHTML
HTML 요소의 내용을 가져옵니다.
그러나, 위의 다른 방법을 배우는 것은 DOM의 트리 구조와 탐색을 이해하는 데 도움이 됩니다.
DOM 루트 노드
전체 문서에 접근할 수 있는 두 가지 특수 속성이 있습니다:
- document.body - 문서의 body
- document.documentElement - 전체 문서
예제
<html> <body> <p>Hello World!</p> <div> <p>DOM은 매우 유용합니다!</p> <p><b>document.body</b> 속성을 보여줍니다.</p> </div> <script> alert(document.body.innerHTML); </script> </body> </html>
예제
<html> <body> <p>Hello World!</p> <div> <p>DOM은 매우 유용합니다!</p> <p><b>document.documentElement</b> 속성을 보여줍니다.</p> </div> <script> alert(document.documentElement.innerHTML); </script> </body> </html>
nodeName 속성
nodeName
속성은 노드의 이름을 정의합니다.
- nodeName은 읽기 전용입니다
- 요소 노드의 nodeName은 태그 이름과 동일합니다
- 속성 노드의 nodeName은 속성 이름입니다
- 텍스트 노드의 nodeName은 항상 #text입니다
- 문서 노드의 nodeName은 항상 #document입니다
예제
<h1 id="id01">내 첫 번째 웹 페이지</h1> <p id="id02">안녕하세요!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").nodeName; </script>
주의:nodeName은 항상 대문자 태그 이름을 포함합니다.
nodeValue 속성
nodeValue
속성은 노드의 값을 정의합니다.
- 요소 노드의 nodeValue는 undefined입니다
- 텍스트 노드의 nodeValue는 텍스트 텍스트입니다
- 속성 노드의 nodeValue는 속성 값입니다
nodeType 속성
nodeType
속성은 노드의 유형을 반환합니다.nodeType
읽기 전용입니다.
예제
<h1 id="id01">내 첫 번째 웹 페이지</h1> <p id="id02">안녕하세요!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").nodeType; </script>
가장 중요한 nodeType 속성은:
노드 | 타입 | 예제 |
---|---|---|
ELEMENT_NODE | 1 | <h1 class="heading">W3School</h1> |
ATTRIBUTE_NODE | 2 | class = "heading" (폐지) |
TEXT_NODE | 3 | W3School |
COMMENT_NODE | 8 | <!-- 이는 주석입니다 --> |
DOCUMENT_NODE | 9 | HTML 문서 자체 (<html>의 부모) |
DOCUMENT_TYPE_NODE | 10 | <!DOCTYPE html> |
Type 2은 HTML DOM에서 폐지되었습니다. XML DOM에서는 폐지되지 않았습니다.
- 이전 페이지 DOM 이벤트 리스너
- 다음 페이지 DOM 노드