JS 튜토리얼

제이에스 홈 JS 소개 JS 어디로 JS 출력 JS 문 JS 구문 JS 코멘트 JS 변수 제이에스렛 JS 상수 JS 연산자 JS 산술 JS 할당 JS 데이터 유형 JS 함수 JS 객체 JS 이벤트 JS 문자열 JS 문자열 메서드 JS 문자열 검색 JS 문자열 템플릿 JS 번호 JS 숫자 메서드 JS 배열 JS 배열 메서드 JS 배열 정렬 JS 배열 반복 JS 배열 상수 JS 날짜 JS 날짜 형식 JS 날짜 가져오기 메서드 JS 날짜 설정 방법 JS 수학 JS 랜덤 JS 부울 JS 비교 JS 조건 JS 스위치 JS 루프 In에 대한 JS 루프 의 JS 루프 JS 루프 동안 JS 브레이크 JS 이터러블 JS 세트 JS 맵 JS 유형 JS 유형 변환 JS 비트와이즈 JS 정규 표현식 JS 오류 JS 범위 JS 호이스팅 JS 엄격 모드 JS 이 키워드 JS 화살표 함수 JS 클래스 JS JSON JS 디버깅 JS 스타일 가이드 JS 모범 사례 JS 실수 JS 성능 JS 예약어

JS 버전

JS 버전 JS 2009(ES5) JS 2015(ES6) JS 2016 JS 2017 JS 2018 JS IE / 엣지 JS 연혁

JS 객체

객체 정의 개체 속성 개체 메서드 개체 표시 개체 접근자 객체 생성자 개체 프로토타입 객체 반복 가능 객체 세트 객체 맵 개체 참조

JS 함수

기능 정의 기능 매개변수 함수 호출 함수 호출 기능 적용 함수 클로저

JS 클래스

수업 소개 클래스 상속 클래스 정적

JS 비동기

JS 콜백 JS 비동기 JS 약속 JS 비동기/대기

JS HTML DOM

DOM 소개 DOM 메서드 DOM 문서 DOM 요소 DOM HTML DOM 양식 DOM CSS DOM 애니메이션 DOM 이벤트 DOM 이벤트 리스너 DOM 탐색 DOM 노드 DOM 컬렉션 DOM 노드 목록

JS 브라우저 BOM

JS 창 JS 화면 JS 위치 JS 연혁 JS 네비게이터 JS 팝업 경고 JS 타이밍 JS 쿠키

JS 웹 API

웹 API 소개 웹 양식 API 웹 기록 API 웹 스토리지 API 웹 작업자 API 웹 가져오기 API 웹 지리적 위치 API

JS 아약스

AJAX 소개 AJAX XMLHttp AJAX 요청 AJAX 응답 AJAX XML 파일 AJAX PHP AJAX ASP AJAX 데이터베이스 AJAX 애플리케이션 AJAX 예제

JS JSON

JSON 소개 JSON 구문 JSON 대 XML JSON 데이터 유형 JSON 구문 분석 JSON 문자열화 JSON 객체 JSON 배열 JSON 서버 JSON PHP JSON HTML JSON JSONP

JS 대 jQuery

jQuery 선택기 제이쿼리 HTML 제이쿼리 CSS 제이쿼리 DOM

JS 그래픽

JS 그래픽 JS 캔버스 JS 플로틀리 JS 차트.js JS 구글 차트 JS D3.js

JS 예제

JS 예제 JS HTML DOM JS HTML 입력 JS HTML 객체 JS HTML 이벤트 JS 브라우저 JS 편집기 JS 연습 JS 퀴즈 JS 인증서

JS 참조

자바스크립트 객체 HTML DOM 객체


자바스크립트 HTML DOM 탐색


HTML DOM을 사용하면 노드 관계를 사용하여 노드 트리를 탐색할 수 있습니다.


DOM 노드

W3C HTML DOM 표준에 따르면 HTML 문서의 모든 것은 노드입니다.

  • 전체 문서는 문서 노드입니다.
  • 모든 HTML 요소는 요소 노드입니다.
  • HTML 요소 내부의 텍스트는 텍스트 노드입니다.
  • 모든 HTML 속성은 속성 노드입니다(더 이상 사용되지 않음).
  • 모든 주석은 주석 노드입니다.
DOM HTML tree

HTML DOM을 사용하면 노드 트리의 모든 노드에 JavaScript로 액세스할 수 있습니다.

새 노드를 생성할 수 있으며 모든 노드를 수정하거나 삭제할 수 있습니다.


노드 관계

노드 트리의 노드는 서로 계층 관계가 있습니다.

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

  • 노드 트리에서 최상위 노드를 루트(또는 루트 노드)라고 합니다.
  • 모든 노드에는 루트(부모가 없음)를 제외하고 정확히 하나의 부모가 있습니다.
  • 노드는 여러 자식을 가질 수 있습니다.
  • 형제자매(형제자매)는 부모가 같은 노드입니다.
<html>

  <head>
    <title>DOM Tutorial</title>
  </head>

  <body>
    <h1>DOM Lesson one</h1>
    <p>Hello world!</p>
  </body>

</html>
노드 트리

위의 HTML에서 다음을 읽을 수 있습니다.

  • <html> 루트 노드입니다
  • <html> 부모가 없다
  • <html>의 부모 <head>이며<body>
  • <head> 의 첫 번째 자녀입니다. <html>
  • <body> 의 마지막 아이입니다 <html>

그리고:

  • <head> 자녀가 한 명 있습니다: <title>
  • <title> 하나의 자식(텍스트 노드)이 있습니다: "DOM Tutorial"
  • <body>두 자녀가 있습니다 <h1>.<p>
  • <h1>자녀가 한 명 있습니다: "DOM Lesson 1"
  • <p>자녀가 한 명 있습니다. "Hello world!"
  • <h1>그리고 <p>형제다.


노드 간 탐색

다음 노드 속성을 사용하여 JavaScript로 노드 간을 탐색할 수 있습니다.

  • parentNode
  • childNodes[nodenumber]
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

자식 노드 및 노드 값

DOM 처리의 일반적인 오류는 요소 노드에 텍스트가 포함될 것으로 예상하는 것입니다.

예시:

<title id="demo">DOM Tutorial</title>

요소 노드 <title>(위의 예에서) 에는 텍스트가 포함되어 있지 않습니다 .

여기에는 값이 "DOM Tutorial" 인 텍스트 노드 가 포함됩니다.

텍스트 노드의 값은 노드의 innerHTML속성으로 액세스할 수 있습니다.

myTitle = document.getElementById("demo").innerHTML;

innerHTML 속성에 액세스하는 nodeValue 것은 첫 번째 자식에 액세스하는 것과 동일합니다.

myTitle = document.getElementById("demo").firstChild.nodeValue;

첫 번째 자식에 액세스하는 것도 다음과 같이 수행할 수 있습니다.

myTitle = document.getElementById("demo").childNodes[0].nodeValue;

다음의 모든 (3) 예는 요소의 텍스트를 검색하여 <h1>요소에 복사합니다 <p>.

예시

<html>
<body>

<h1 id="id01">My First Page</h1>
<p id="id02"></p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").innerHTML;
</script>

</body>
</html>

예시

<html>
<body>

<h1 id="id01">My First Page</h1>
<p id="id02"></p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue;
</script>

</body>
</html>

예시

<html>
<body>

<h1 id="id01">My First Page</h1>
<p id="id02">Hello!</p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue;
</script>

</body>
</html>

내부HTML

이 자습서에서는 innerHTML 속성을 사용하여 HTML 요소의 내용을 검색합니다.

그러나 위의 다른 방법을 배우는 것은 트리 구조와 DOM 탐색을 이해하는 데 유용합니다.


DOM 루트 노드

전체 문서에 대한 액세스를 허용하는 두 가지 특수 속성이 있습니다.

  • document.body - 문서의 본문
  • document.documentElement - 전체 문서

예시

<html>
<body>

<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.body</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = document.body.innerHTML;
</script>

</body>
</html>

예시

<html>
<body>

<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.documentElement</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = document.documentElement.innerHTML;
</script>

</body>
</html>

nodeName 속성

nodeName속성은 노드의 이름을 지정합니다 .

  • nodeName은 읽기 전용입니다.
  • 요소 노드의 nodeName은 태그 이름과 동일합니다.
  • 속성 노드의 nodeName은 속성 이름입니다.
  • 텍스트 노드의 nodeName은 항상 #text입니다.
  • 문서 노드의 nodeName은 항상 #document입니다.

예시

<h1 id="id01">My First Page</h1>
<p id="id02"></p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").nodeName;
</script>

참고: nodeName 항상 HTML 요소의 대문자 태그 이름을 포함합니다.


nodeValue 속성

nodeValue속성은 노드의 값을 지정합니다 .

  • 요소 노드의 nodeValue는 null
  • 텍스트 노드의 nodeValue는 텍스트 자체입니다.
  • 속성 노드의 nodeValue는 속성 값입니다.

nodeType 속성

속성 은 nodeType읽기 전용입니다. 노드의 유형을 반환합니다.

예시

<h1 id="id01">My First Page</h1>
<p id="id02"></p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").nodeType;
</script>

가장 중요한 nodeType 속성은 다음과 같습니다.

Node Type Example
ELEMENT_NODE 1 <h1 class="heading">W3Schools</h1>
ATTRIBUTE_NODE 2  class = "heading" (deprecated)
TEXT_NODE 3 W3Schools
COMMENT_NODE 8 <!-- This is a comment -->
DOCUMENT_NODE 9 The HTML document itself (the parent of <html>)
DOCUMENT_TYPE_NODE 10 <!Doctype html>

유형 2는 HTML DOM에서 더 이상 사용되지 않지만 작동합니다. XML DOM에서는 더 이상 사용되지 않습니다.