English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScript 기본 튜토리얼

JavaScript 객체

JavaScript 함수

JS HTML DOM

JS 브라우저 BOM

AJAX 기본 튜토리얼

JavaScript 참조 매뉴얼

JS DOM 탐색

HTML DOM은 JavaScript가 노드 관계를 통해 노드 트리를 탐색할 수 있도록 허용합니다

DOM 노드

W3C HTML DOM 표준에 따르면, HTML 문서의 모든 내용은 노드입니다:

  • 전체 문서는 문서 노드입니다

  • 각 HTML 요소는 요소 노드입니다

  • HTML 요소 내의 텍스트는 텍스트 노드입니다

  • 각 HTML 속성은 속성 노드입니다(사용을 권장하지 않습니다)

  • 모든 주석은 주석 노드입니다

HTML DOM을 사용하면 JavaScript가 노드 트리의 모든 노드에 접근할 수 있습니다

새 노드를 생성하고 모든 노드를 수정하거나 제거할 수 있습니다

노드 관계

노드 트리의 노드는 계층 관계를 가집니다

용어 '부모', '자식', '형제자매'는 관계를 설명하는 데 사용됩니다

  • 노드 트리에서 최상위 노드는 뿌리(또는 뿌리 노드)라고 합니다

  • 각 노드는 하나의 부모 노드를 가집니다. 뿌리 노드(뿌리 노드는 부모 노드가 없습니다)를 제외하고

  • 한 노드는 여러 자식 노드를 가질 수 있습니다

  • 형제자매(형제자매)는 같은 부모 노드를 가진 노드입니다

<html>
  <head>
<title>DOM Tutorial</title>
  </head>
  
<h1>DOM Nodes</h1>
<p>Hello, World</p>
  
</html>

위의 HTML에서 읽을 수 있습니다:
<html>是根节点,并且没有父节点
<html>是<head>和<body>的父级
<head>是<html>的第一个孩子
<body>是<html>的最后一个孩子
和:
<head>有一个孩子:<title>
<title>有一个孩子(一个文本节点):“ DOM Tutorial”
<body>有两个孩子:<h1>和<p>
<h1>有一个孩子(一个文本节点):“ DOM Nodes”
<p>有一个孩子(一个文本节点):“ Hello,world”
<h1>和<p>是同级

在节点之间导航

您可以使用以下节点属性在具有JavaScript的节点之间导航:

访问子节点

형제 노드에 접근하려면firstChild使用DOM节点的属性来访问节点的第一个直接子节点。

<p id="para">
  <span>First span</span>
  <b>First Bold</b>
</p>
<script>
<p>This is third P inside DIV<
alert(para.firstElementChild.nodeName); // returns SPAN
</script>
测试看看 «/›

注意:在上面的示例中,输出将是#text,因为插入了文本节点以维护标记之间的空白。任何空格都会创建一个#text节点,从单个空格到多个空格,返回,制表符等。

但是,如果删除空格,则不会插入#text节点,并且span元素将成为段落的第一个子元素:

<p id="para"><span>First span</span> <b>First Bold</b></p>
<script>
<p>This is third P inside DIV<
alert(para.firstChild.nodeName); // returns SPAN
</script>
테스트를 보세요‹/›

访问第一个孩子也可以这样进行:

para.childNodes[0].nodeName; // returns SPAN
테스트를 보세요‹/›

형제 노드에 접근하려면lastChild使用DOM节点的属性来访问节点的最后一个直接子节点。

para.lastChild.nodeName; // returns B
테스트를 보세요‹/›

为避免出现#text#comment노드firstChildlastChild返回该问题,您可以选择使用:

firstElementChild属性返回指定父元素的第一个子元素。

<p id="para">
  <span>First span</span>
  <b>First Bold</b>
</p>
<script>
<p>This is third P inside DIV<
alert(para.firstElementChild.nodeName); // returns SPAN
</script>
테스트를 보세요‹/›

lastElementChild属性返回指定父元素的最后一个子元素。

<p id="para">
  <span>First span</span>
  <b>First Bold</b>
</p>
<script>
<p>This is third P inside DIV<
alert(para.lastElementChild.nodeName); // returns B
</script>
테스트를 보세요‹/›

注:주의:nodeName

은 읽기 전용 속성으로, 현재 노드의 이름을 문자열로 반환합니다.

형제 노드에 접근하려면부모 노드에 접근parentNode

<div>
   속성을 사용하여 DOM 트리에서 지정된 노드의 부모 단계에 접근할 수 있습니다./p>
   <p>This is first P inside DIV</p>
   <p id="para">This is second P inside DIV</p>
</div>
<script>
<p>This is third P inside DIV<
var para = document.getElementById("para");  // alert(para.parentNode.nodeName);
</script>
테스트를 보세요‹/›

returns DIV속성은 지정된 요소의 부모 요소를 반환합니다.parentElement

속성을 사용할 수 있습니다.

형제 노드에 접근하려면previousSiblingnextSibling속성을 사용하여 DOM 트리에서 상위와 하위 노드에 접근할 수 있습니다.

<div id="div-1">Here is div-1</div>
<div id="div-2">Here is div-2</div>
<div id="div-3">Here is div-3</div>
<script>
var x = document.querySelector("#div-2");
alert(x.previousSibling.nodeName);
alert(x.nextSibling.nodeName);
</script>
테스트를 보세요‹/›

또는, 다음을 사용하여previousElementSiblingnextElementSibling백스페이스 텍스트 노드를 건너뜀으로써 상위와 하위 동급 요소를 가져올 수 있습니다.

<div id="div-1">Here is div-1</div>
<div id="div-2">Here is div-2</div>
<div id="div-3">Here is div-3</div>
<script>
var x = document.querySelector("#div-2");
alert(x.previousElementSibling.textContent);
alert(x.nextElementSibling.textContent);
</script>
테스트를 보세요‹/›

textContent속성은 노드의 텍스트 내용을 나타냅니다.

DOM 루트 노드

다음 두 속성은 전체 문서에 접근할 수 있습니다:

document.body속성은 문서의 요소를 설정하거나 반환합니다.

<!DOCTYPE html>
<html>
<p>Hello, World!</p>
<div>
  <p>DOM 루트 노드</p>
  <p>document.body 속성은 문서의 body 요소를 설정하거나 반환합니다.</p>
</div>
<script>
alert(document.body.innerHTML);
</script>
</html>
테스트를 보세요‹/›

document.documentElement속성은 문서의<html>요소.

<!DOCTYPE html>
<html>
<p>Hello, World!</p>
<div>
  <p>DOM 루트 노드</p>
  <p>document.documentElement 속성은 문서의 루트 요소를 반환합니다.</p>
</div>
<script>
alert(document.documentElement.innerHTML);
</script>
</html>
테스트를 보세요‹/›

nodeType 속성

nodeType속성은 지정된 노드의 노드 형식을 숫자로 반환합니다.

var x = document.getElementById("myPara").nodeType;
테스트를 보세요‹/›

DOM 트리는 다양한 형식의 노드로 구성되어 있습니다. 예를 들어, 요소, 텍스트, 주석 등입니다.

각 노드는 하나의nodeType속성은 처리할 노드 형식을 찾기 위해 사용할 수 있습니다。

아래 표는 가장 중요한 노드 형식을 나열합니다:

노드형식
ELEMENT_NODE1개<p class="heading">Hello, World</p>
ATTRIBUTE_NODE2 class =“heading”(권장하지 않음)
TEXT_NODE3Hello, World
COMMENT_NODE8<!--이는 주석입니다-->
DOCUMENT_NODE9HTML 문서 자체(<html>의 부모)
DOCUMENT_TYPE_NODE10<!doctype html>