본문 바로가기
WEB/JavaScript

[JavaScript] DOM (문서 객체 모델)

by Amy IT 2022. 7. 2.

 

 

목차

     

     

    DOM 이란?

    이미지 출처 https://www.geeksforgeeks.org/what-is-document-object-in-java-dom/

    • DOM (Document Object Model, 문서 객체 모델)은 HTML, XML 문서의 프로그래밍 인터페이스 입니다.
    • 웹 페이지가 로드될 때, 웹 브라우저는 페이지의 DOM을 생성합니다.
    • DOM은 nodes와 objects로 문서를 객체 지향적으로 표현합니다.
    • DOM은 웹 페이지를 계층적인 트리구조로 정리하여, 프로그래밍 언어가 DOM 구조에 접근해서 문서 구조, 스타일, 내용 등을 변경할 수 있도록 지원합니다. 
    • 문서를 나타내는 최상위 객체는 document 객체입니다.

     

     

     

    DOM의 핵심 API

    순회 childNodes, firstChild, lastChild, nextSibling, previousSibling
    선택 getElementById() , getElementsByTagName()
    getElementsByName(), getElementsByClassName()
    querySelector(), querySelectorAll()
    생성, 추가, 삭제 createElement(), createTextNode(), appendChild(), removeChild()
    createAttribute() , setAttribute(), getAttribute()
    내용 저장, 조회 innerHTML, innerText, value

     

     

     

    DOM 객체 접근 방법

    직접 접근 방법

    (1) id 로 접근

    document.getElementById("id") : Node

     

    (2) 태그명으로 접근

    document.getElementsByTagName("tag") : NodeList

     

    (3) name 속성명으로 접근

    document.getElementsByName("name") : NodeList

     

    (4) class 속성명으로 접근

    document.getElementsByClassName("class") : NodeList

     

    (5) CSS 선택자(selector)로 접근 (#이나 . 등 CSS 기호 사용)

    document.querySelector("css selector") : Node
    document.querySelectorAll("css selector") : NodeList

     

    노드 워킹 접근 방법

    이미지 출처 https://qualitestgroup.com/insights/technical-hub/how-to-traverse-the-dom/

    상대적인 위치로 접근하는 방법입니다. 위 그림과 같이 노드들 간의 관계를 이용합니다.

     

     

     

    DOM이 모두 로드되기를 기다리기

    DOM이 완전히 로드되기 전에 자바스크립트 코드가 실행되면 스크립트가 DOM에 접근할 수 없습니다. HTML은 위에서 아래로 실행되기 때문에, 헤더에 포함된 스크립트는 실제로 HTML DOM이 생성되기 전에 실행됩니다. 이를 해결하기 위해 몇 가지 방법을 사용할 수 있습니다.

     

    body 태그 맨 끝에 스크립트 추가하기

    본문의 맨 끝에 스크립트를 추가하면 DOM이 모두 로딩된 후 스크립트가 실행됩니다.

    <script type="text/javascript">
    </script>
    </body>

     

    onload 이용

    페이지가 모두 로드된 후 자바스크립트 코드가 실행되도록 설정할 수 있습니다. 

    <body onload="xxx();">
    window.onload = function() {}

     

    defer 속성 이용

    외부 스크립트 파일을 참조하는 경우, defer 속성을 사용해 페이지가 모두 로드된 후 외부 스크립트 파일이 실행되도록 설정할 수 있습니다.

    <script src="script.js" defer></script>

     

     

    * 실습

    <h1 id="a" class="one">Hello</h1>
    <h2 id="b" class="one">World</h2>
    <input type="text" id="username" name="username" value="tester"><br>
    <a href="http://www.daum.net" id="daum">다음</a>
    
    <script type="text/javascript">
    var username = document.getElementById("username"); //id가 username인 요소 선택
    console.log(username); //id가 username인 요소
    console.log(username.value); //tester
    username.value = "aaa"; // value값 변경
    
    var arr = document.getElementsByClassName("one"); //class이름이 one인 요소들 선택
    for (var i = 0; i < arr.length; i++) {
    	console.log(arr[i].innerText); //Hello    //World
    }
    arr[0].style = "color: red"; //색상 변경
    arr[1].innerHTML = "<i>World</i>"; //HTML 변경
    
    var daum = document.querySelector("#daum"); //id가 daum인 요소 선택
    console.log(daum.href); //http://www.daum.net/
    </script>

     

     

    참고

    https://developer.mozilla.org/ko/docs/Web/API/Document_Object_Model/Introduction

     

     

    댓글