DOM (1) - 노드

dia·2022년 6월 30일
0
post-thumbnail

DOM

HTML 문서의 계층적 구조와 정보를 표현하는 노드 객체들로 구성된 트리 자료구조로 이 노드 객체들을 제어할 수 있는 API, 즉 프로퍼티와 메서드를 제공한다.

노드

렌더링 엔진이 HTML문서를 파싱하여 HTML 요소가 요소 노드 객체로 변환된다. 이때 어트리뷰트는 어트리뷰트 노드로, 텍스트는 텍스트 노드로 변환된다.

div 요소의 예시

<div id="foo">hello world</div>

HTML 요소는 중첩 관계를 갖고 이해 의해, 부모자식 관계가 형성된다. 이를 반영하여 모든 노드 객체들을 트리 자료 구조로 구성한다.

트리 자료구조

  • 부모 노드와 자식 노드로 구성되어 노드 간 계층적 구조(부자, 형제 관계)를 표현하는 비선형 자료구조
  • 루트 노드에서 시작한다.

→ 노드 객체들로 구성된 트리 자료구조를 DOM 이라 한다.

비선형 자료구조
하나의 자료 뒤에 여러 개의 자료가 존재할 수 있는 자료구조. ex) 트리, 그래프

루트 노드
트리 자료구조의 최상위 노드. 부모 노드가 없으며 0개 이상의 자식 노드를 갖는다.

선형 자료구조
하나의 자료 뒤에 하나의 자료 만 존재하는 자료구조. ex) 배열, 스택, 큐, 링크드 리스트, 해시 테이블

리프 노드
자식 노드가 없는 노드

노드 객체의 타입

문서 노드

  • 루트 노드로서 document 객체를 가리킨다.
  • 브라우저가 렌더링한 HTML 문서 전체를 가리키는 객체. 전역 객체 windowdocument 프로퍼티에 바인딩 되어있다. window.document 또는 document로 참조할 수 있다.
  • HTML 문서 당 document 객체는 유일하다.
    • 자바스크립트 코드가 여러 script 태그에 의해 분리되어 있어도 하나의 전역 객체 window를 공유한다. 즉, 모든 자바스크립트 코드는 전역 객체 windowdocument 프로퍼티에 바인딩 되어 있는 하나의 document 객체를 바라본다.

요소 노드

  • HTML 요소를 가리키는 객체
  • HTML 요소 간 중첩에 의해 부자 관계를 가지며 이를 통해 정보를 구조화함
  • 문서의 구조를 표현

어트리뷰트 노드

  • HTML 요소의 어트리뷰트를 가리키는 객체
  • 어트리뷰트가 지정된 HTML 요소의 요소 노드와 연결되어 있음
  • 부모 노드가 없고 요소 노드와만 연결되어 있다 → 어트리뷰트 노드에 접근하려면 요소 노드에 먼저 접근해야 함

텍스트 노드

  • HTML 요소의 텍스트를 가리키는 객체
  • 문서의 정보를 표현
  • 요소 노드의 자식 노드
  • 리프 노드이다. 즉, DOM의 최종단임. → 텍스트 노드에 접근하려면 요소노드에 먼저 접근해야함.

그 외 노드 타입

Comment 노드, DocumentType 노드, DocumentFragment 노드 등

노드 객체의 상속 구조

DOM API

자바스크립트 빌트인 객체가 아닌 브라우저 환경에서 추가적으로 제공하는 호스트 객체. 노드 객체가 자신의 부모, 형제, 자식을 탐색할 수 있으며, 어트리뷰트 및 텍스트 조작을 가능하게 한다.

노드 타입별 상속받는 인터페이스

  • 노드 객체는 프로토타입에 의한 상속 구조를 갖는다.
    • 노드 객체의 공통된 기능일수록 프로토타입 체인의 상위에, 개별적인 고유 기능일수록 프로토타입 체인의 하위에 프로토타입 체인을 구축
노드 타입인터페이스
공통Object, EventTarget, Node
문서 노드Document, HTMLDocument
어트리뷰트 노드Attr
텍스트 노드CharacterData
요소 노드Element
  • 요소 노드 태그 종류별 인터페이스 :
    HTMLHtmlElement, HTMLHeadElement, HTMLBodyElement, HTMLUListElement, etc

  • 한 요소 노드 객체는 다양한 특성을 가지며 이에 따라 여러 가지 기능을 상속을 통해 제공받는다.

<input 요소의 예>

기능 구분input 요소 노드 객체의 특성프로토타입을 제공하는 객체
공통객체Object
공통이벤트를 발생시키는 객체EventTarget
공통트리 자료구조의 노드 객체Node
개별브라우저가 렌더링할 수 있는 웹 문서 요소(HTML, XML, SVG)를 표현하는 객체Element
개별웹 문소 요소 중 HTML 요소를 표현하는 객체HTMLElement
개별HTML 요소 중 input 요소를 표현하는 객체HTMLInputElement
profile
얼레벌레 프론트엔드 개발자

0개의 댓글