DOM(Document Object Model)

DOM

JavaScript를 배운다는 건…
core(문법), core library(기본 제공 함수 등), BOM, DOM
이 중 DOM에 대해 정리해보겠습니다.

DOM(Document Object Model)

노드, 스타일, 속성, 이벤트, 위치 및 크기 등을 다룰 수 있는 다양한 기능이 포함되어 있습니다.
※ 노드 : HTML 웹페이지 구성요소의 가장 작은 단위로써 요소, 주석, 텍스트 등이 모두 노드에 해당합니다.

DOM과 HTML페이지의 관계

  1. HTML페이지 로딩
    -> 2. 파싱(Parsing)을 거쳐 작성된 마크업 요소와 1:1로 매칭되는 DOM객체 생성(DOM Tree)
    예를들어, 파싱단계에서 <div>를 만나면 HTMLDivElement라는 클래스의 인스턴스(객체)를 생성하게 됩니다.
    -> 3. 브라우저 화면에 출력

핵심 DOM 객체

Node : 노드를 다루는 기본 기능과 프로퍼티 제공. 노드를 탐색, 조작
※ 노드에는 Element node(요소), Text node(텍스트, 빈칸포함), 주석 노드 등도 모두 포함
Document : text node, element node, attribute node 생성
Element : 요소의 기본 기능과 프로퍼티 제공. 속성과 이벤트 제어
Text : 텍스트를 다루는 기능
Attribute : 속성을 다루는 기능
HTMLDocument : Document객체를 확장하여 HTML용 프로퍼티와 메서드를 추가한 객체
HTMLElement : HTML요소의 기본 기능과 프로퍼티 제공. id, className, style등이 존재

DOM객체 Node
상속구조 Node
기능 노드 탐색, 조작하는 프로퍼티와 메서드
주요 프로퍼티 node.parentNode 부모노드 탐색
node.childNodes 자식노드들 탐색
node.firstChild 첫번째 자식노드 탐색
node.lastChild 마지막 자식노드 탐색
node.previousSibling 이전 형제노드 탐색
node.nextSibling다음 형제노드 탐색
node.children 그 안의 요소만 가져옴.
빈칸은 textnode인데 가져오지 않으므로 편리하다.
node.nodeName요소의 이름을 대문자로 반환
node.nodeType 요소노드는 1, 텍스트노드 3, 주석노드 8
node.nodeValue 텍스트노드에만 접근 가능.
텍스트 노드의 실제 값 반환. 요소노드의 경우는 null 반환
node.hasChildNodes() 자식이 있으면 true, 없으면 false

※ 아래는 IE8이하는 안되나 요소만 찾아줌
node.parentElement 부모요소 탐색
node.firstElementChild 첫 자식요소 노드 탐색
node.lastElementChild 마지막 자식 요소 노드 탐색
node.previousElementSibling 이전 형제요소 탐색
node.nextElementSibling 다음 형제요소 탐색
주요 메서드 node.hasChildNodes() true/false 반환
node.hasChildNodes() true/false 반환
node.cloneNode(boolean) false가 기본값. true면 자식까지 복제
부모노드.appendChild(자식노드) 부모의 꽁지쪽에 붙이기
목표노드.부모노드.insertBefore(insert삽입할노드, target목표노드)
node.removeChild(childnode)
target_node.parentNode.replaceChild(replace_node, target_node)
노드 교체. 위치를 교체하는 것이 아니라, 이전 노드를 삭제 한다.
이전 노드를 삭제하지만 결과 값으로 반환된다.
사용 예 var el = document.getElementById('div-01').nextSibling;
DOM객체 Document
상속구조 Node > Document
기능 Text node, Element node 생성
주요 프로퍼티
주요 메서드 document.createElement('element') 요소 만들기. 실제 DOM에 붙는건 아님
document.createTextNode('text') 텍스트 노드 만들기
document.createAttribute("name"); 잘쓰지않음
document.getElementById("idname"); id로 대상(요소노드)을 선택
document.getElementsByTagName("p"); 요소명으로 선택
document.getElementsByClassName('classname'); 클래스명으로 선택
document.querySelector(css selector);막강!!! IE8이상. 첫번째 하나만 반환
document.querySelectorAll(css selector); 상동. 전체 복수로 반환
createEvent()
target.addEventListener(type, listener[, options]);
dispatchEvent()
removeListener()
DOM객체 HTMLDocument
상속구조 Node > Document > HTMLDocument
기능 HTML문서 전용 프로퍼티, 메서드
주요 프로퍼티
주요 메서드 close()
open()
write()
Element[]
getElementByName()
DOM객체 Element
상속구조 Node > Element
기능 속성을 다루는 기능, 이벤트
주요 프로퍼티 tagName 요소의 이름반환. 예전방식
주요 메서드 Element[]
ElementsByTagName()
element.hasAttribute(attName); true/false 반환
element.getAttribute(attributeName);
element.removeAttribute(attrName);
element.setAttribute(name, value);
target.addEventListener(type, listener[, options]);
dispatchEvent()
removeListener()
사용 예 var parent_el = document.getElementById('parent');
console.log('data-con:', parent_el.getAttribute('data-con'));
DOM객체 HTMLElement
상속구조 Node > Element > HTMLElement
기능 HTML요소 전용 프로퍼티, 메서드
주요 프로퍼티 element.id
element.className
element.innerHTML = content;노드 동적생성을 쉽게해줌
element.style.color = "blue";
element.offsetWidth border까지의 width
element.offsetHeight border까지의 height
element.offsetLeft
element.offsetTop
주요 메서드 onkeydown
onkeypress
onkeyup
onclick
ondbclick
onmousedown
onmousemove
onmouseout
onmouseover
onmouseup
사용 예 var parent_el = document.getElementById('parent');
console.log('id:', parent_el.id);
console.log('class:', parent_el.className);
console.log('title:', parent_el.title);

참고 자료

DOM - MDN
My Github 링크
웹 프론트엔드 개발자를 위한, 자바스크립트+jQuery 완전정복 스터디 - 김춘경(딴동네)

Share