문서 객체 모델(DOM, Document Object Model)

2023. 5. 17. 21:09HTML, Javascript, CSS

- 문서 객체 모델(DOM)이란?

웹 페이지(HTML or XML)의 콘텐츠 및 구조, 그리고 스타일 요소를 구조화 시켜 표현하여 프로그래밍 언어가 해당 문서에 접근하여 읽고 조작할 수 있도록 API를 제공하는 일종의 인터페이스

자바스크립트 같은 스크립팅 언어가 쉽게 웹 페이지에 접근하여 조작할 수 있게끔 연결시켜주는 역할을 담당

W3C의 표준 객체 모델

DOM은 웹 페이지, HTML 문서를 계층적 구조와 정보로 표현하며 이를 제어할 수 있는 프로퍼티와 메서드를 제공하는 트리 자료구조 => HTML DOM, 혹은 HTML DOM Tree로 부르기도 함

트리 자료 구조로 구축이 되기 때문에 HTML 문서는 최종적으로 하나의 최상위 노드(root node)에서 시작해 자식 노드들을 가지며, 아래로만 뻗어 나가는 구조로 만들어지게 됨

DOM은 꼭 자바스크립트로만 구현되는 것이 아닌, 어떤 프로그래밍 언어에 의존하지 않는 독립적인 인터페이스. but 현재 웹 브라우저에서 DOM을 조작하는 언어는 자바스크립트 뿐

 

위 문서는 아래 트리 구조로 표현 가능

- document node(문서 노드)

DOM Tree에서 최상위 루트 노드를 나타내며, document 객체를 가리킴

HTML 문서 전체를 나타내는 노드

window 객체의 document 프로퍼티로 바인딩(연결)이 되어있어 window.document, document로 참조해 사용할 수 있음

HTML 문서에 document node는 단 1개만 존재함

- element node(요소 노드)

모든 HTML 요소(body, h2, div )는 요소 노드

속성 노드를 가질 수 있는 유일한 노드

부모-자식 관계를 가지게 되기 때문에 계층적 구조를 이룰 수 있음

- attribute node(속성 노드)

모든 HTML 요소의 속성은 속성 노드

요소 노드에 대한 정보를 가지고 있음 => 부모 노드가 아닌 해당 노드와 바인딩(연결)이 되어있음

- text node(텍스트 노드)

HTML 문서의 거의 모든 텍스트는 text node

정보를 표현하며, 가장 마지막에 위치하는 자식노트(leaf node)

 

4가지 노드들로 스크립팅 언어는 웹 페이지에 접근하고 조작

데이터 검색이 빠른 트리 구조로 이뤄져 있기 때문에 접근하고 조작하여 업데이트 하는 속도가 빠른 편

 

- DOM의 종류

Core DOM: 모든 문서 타입을 위한 DOM 모델

HTML DOM: HTML 문서를 위한 DOM 모델 / HTML 문서를 조작하고 접근하는 표준화된 방법을 정의 / 모든 HTML 요소는 HTML DOM을 통해 접근할 수 있음

XML DOM: XML 문서를 위한 DOM 모델 / XML 문서를 조작하고 접근하는 표준화된 방법을 정의 / 모든 XML 요소는 XML DOM을 통해 접근할 수 있음

 

- 자바스크립트를 이용한 DOM 동적 생성

자바스크림트로 HTML 문서에 없는 노드를 만들어 이어 붙이거나 노드를 수정하여 웹 페이지에 렌더링되게 만들어 동적으로 구현 가능

DOM을 이용하여 자바스크립트로 다음과 같은 작업 가능

  • 새로운 HTML 요소나 속성 추가
  • 존재하는 HTML 요소나 속성 제거
  • HTML 문서의 모든 HTML 요소 변경
  • HTML 문서의 모든 HTML 속성 변경
  • HTML 문서의 모든 CSS 스타일 변경
  • HTML 문서에 새로운 HTML 이벤트 추가
  • HTML 문서의 모든 HTML 이벤트에 반응

 

- DOM 객체의 구성 요소

프로퍼티(property): DOM 객체의 멤버 변수 / HTML 태그의 속성을 반영

메소드(method): DOM 객체의 멤버 함수 / HTML 태그를 제어

컬렉션(collection): 정보를 집합적으로 표현하는 일종의 배열

이벤트 리스너(event listener): HTML 태그에 작성된 이벤트 리스너(onclick, onchange )들을 그대로 가짐

스타일(style): HTML 태그에 적용된 CSS 스타일 시트에 접근 가능

 

- DOM의 주요 데이터타입(Datatype)

데이터 타입은 객체이기 때문에 각각 프로퍼티와 메소드를 가지고 있음

document: memberdocument 타입의 object를 리턴할 때, objectroot document object 자체임

element: DOM APImember에 의해 returnelement 또는 element 타입의 노드

nodeList: element의 배열

namedNodeMap: 배열과 유사하지만 안의 요소에 접근할 때 name 또는 index로 접근

 

- JavascriptDOM 접근 방법

DOM의 인터페이스를 이용하여 접근할 수 있음

아래는 자바스크립트가 DOMAPI중 자주 쓰는 메소드와 프로퍼티

  • document.querySelector(selectors)
  • document.querySelectorAll(selectors)
  • document.getElementById(id)
  • document.getElementByTagName(name)
  • document.createElement(name)
  • node.append(node)
  • node.appendChild(node)
  • node.remove(node)
  • node.removeChild(node)
  • element.innerHTML
  • node.textContent
  • element.setAttribute(name, value)
  • element.getAttribute(name)
  • element.addEventListener(type, listener)

위 메소드, 프로퍼티로 동적으로 노드 생성, 삭제, 변경 가능

 

 

 

 

 

 

참고:

https://www.codestates.com/blog/content/dom-javascript

 

문서 객체 모델 DOM 과 자바스크립트 JavaScriptㅣ생성 방식 및 접근 방법 - 코드스테이츠 공식 블로

웹 개발을 하는 프론트엔드 개발자라면 알고 있어야하는 자바스크립트(JavaScript)와 DOM(문서 객체 모델)란 무엇일까요?자바스크립트와 DOM(문서 객체 모델)의 관계와 차이점은 무엇인지, 자바스크

www.codestates.com

http://www.tcpschool.com/javascript/js_dom_concept

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'HTML, Javascript, CSS' 카테고리의 다른 글

[JavaScript] async, await  (0) 2023.03.21
[JavaScript] Promise  (0) 2023.03.21
[JavaScript] 나머지 매개변수(Rest Parameters)  (0) 2023.03.21
클로저(Closure)  (0) 2023.03.20
어휘적 환경(Lexical Environment)  (0) 2023.03.20