문서 객체 모델 (DOM)
문서 객체 모델(DOM)은 자바스크립트를 이용해 HTML 문서에 접근하고 제어할 수 있도록 하는 객체 기반의 구조입니다. DOM을 사용하면 웹 페이지의 구조를 자바스크립트로 동적으로 변경할 수 있습니다. DOM은 트리 구조로 되어 있으며, HTML의 각 요소는 노드(Node)라는 객체로 표현됩니다.
DOM 쓰는 이유 : 페이지를 처음 로드한 이후에도 자바스크립트를 통해 새로운 요소를 추가하거나, 스타일을 변경하거나, 이벤트를 처리하는 등 동적인 조작이 가능 !!!
DOM의 기본 구성
- 요소 노드 (Element Node): 모든 HTML 태그는 요소 노드로 간주됩니다. 각 HTML 태그가 트리 구조에서 하나의 노드로 존재합니다.
<div> <!-- 요소 노드 --> <p>Hello, World!</p> <!-- 요소 노드 --> </div>
- 텍스트 노드 (Text Node): HTML 요소 안에 있는 텍스트는 텍스트 노드로 표현됩니다.
<p>Hello, World!</p> <!-- "Hello, World!"는 텍스트 노드 -->
- 속성 노드 (Attribute Node): HTML 태그에 지정된 속성은 속성 노드로 간주됩니다.
<img src="image.jpg" alt="sample image"> <!-- src와 alt가 속성 노드 -->
- 주석 노드 (Comment Node): HTML 문서 내에 있는 주석은 주석 노드로 표현됩니다.
<!-- This is a comment -->
DOM 요소 선택하기
DOM에서 HTML 요소를 선택하여 제어하려면 다양한 메서드를 사용할 수 있습니다.
getElementById()
: 특정 ID를 가진 요소를 선택합니다.const element = document.getElementById('myElement');
getElementsByClassName()
: 특정 클래스를 가진 모든 요소를 선택합니다. HTMLCollection을 반환하며, 배열처럼 인덱스로 접근할 수 있습니다.const elements = document.getElementsByClassName('myClass');
getElementsByTagName()
: 특정 태그명을 가진 모든 요소를 선택합니다.const elements = document.getElementsByTagName('p');
querySelector()
: CSS 선택자를 사용하여 첫 번째 요소만 선택합니다.const element = document.querySelector('.myClass');
querySelectorAll()
: CSS 선택자를 사용하여 일치하는 모든 요소를 선택하며, NodeList를 반환합니다.const elements = document.querySelectorAll('.myClass');
DOM 요소 내용 가져오고 수정하기
DOM 요소의 내용을 가져오거나 수정하는 방법은 다음과 같습니다.
innerText
: 요소의 텍스트 내용을 가져오거나 수정할 때 사용합니다. CSS에 따라 숨겨진 텍스트는 무시됩니다.const element = document.getElementById('myElement'); console.log(element.innerText); element.innerText = "새로운 텍스트";
innerHTML
: 요소의 HTML 내용을 가져오거나 수정할 때 사용합니다. HTML 태그를 포함한 내용을 처리합니다.const element = document.getElementById('myElement'); console.log(element.innerHTML); element.innerHTML = "<b>강조된 텍스트</b>";
textContent
: 요소의 모든 텍스트 내용을 가져오거나 수정합니다. CSS로 숨겨진 텍스트도 포함됩니다.const element = document.getElementById('myElement'); console.log(element.textContent); element.textContent = "텍스트 내용";
DOM에서 이벤트 처리하기
addEventListener()
: 이벤트를 등록하여 요소에서 특정 동작을 수행할 수 있습니다.const button = document.querySelector("button"); button.addEventListener("click", function() { alert("버튼이 클릭되었습니다!"); });
- CSS 속성에 접근하기: 자바스크립트로 CSS 스타일을 동적으로 변경할 수 있습니다.
const element = document.getElementById('myElement'); element.style.color = "red"; // 텍스트 색상을 빨간색으로 변경
DOM에서 노드 추가 및 삭제
- 노드 리스트 (NodeList):
querySelectorAll()
메서드로 반환되는 객체로, 배열처럼 인덱스로 접근할 수 있지만, 배열은 아닙니다. 배열 메서드를 사용하려면 Array.from() 등을 사용해 배열로 변환해야 합니다. const items = document.querySelectorAll('li'); items.forEach(item => console.log(item.textContent));
- 요소 추가하기
createElement()
: 새로운 HTML 요소를 생성합니다.const newDiv = document.createElement('div'); newDiv.innerText = "새로운 요소";
createTextNode()
: 텍스트 노드를 생성합니다.const newText = document.createTextNode('새로운 텍스트');
appendChild()
: 새로 생성한 요소나 텍스트 노드를 DOM에 추가합니다.const parentDiv = document.getElementById('parent'); parentDiv.appendChild(newDiv);
- 노드 삭제하기
remove()
: 요소를 DOM에서 삭제합니다.const element = document.getElementById('myElement'); element.remove();
클래스 속성 추가 및 삭제
classList.add()
: 클래스 속성을 추가합니다.const element = document.getElementById('myElement'); element.classList.add('newClass');
classList.remove()
: 클래스 속성을 제거합니다.element.classList.remove('newClass');
classList.toggle()
: 클래스가 있으면 제거하고, 없으면 추가합니다.element.classList.toggle('active');
DOMContentLoaded 이벤트
문서의 모든 내용이 불러와졌는지 확인하려면 DOMContentLoaded
이벤트를 사용할 수 있습니다. 이 이벤트는 페이지가 완전히 로드되지 않아도, DOM 트리의 구성이 완료되면 발생합니다.
document.addEventListener("DOMContentLoaded", function() {
console.log("문서가 모두 로드되었습니다.");
});
추가 개념
- 부모, 자식, 형제 노드 탐색
parentNode
: 부모 노드에 접근합니다.const parent = document.getElementById('myElement').parentNode;
children
: 자식 노드들을 가져옵니다. HTMLCollection을 반환합니다.const children = document.getElementById('myElement').children;
nextSibling
: 바로 다음 형제 노드에 접근합니다.const next = document.getElementById('myElement').nextSibling;
previousSibling
: 바로 이전 형제 노드에 접근합니다.const prev = document.getElementById('myElement').previousSibling;
- 노드 복제
cloneNode()
: 노드를 복제할 수 있습니다.true
를 인자로 전달하면 자식 노드까지 함께 복사합니다.const clone = document.getElementById('myElement').cloneNode(true);
요약
- DOM은 자바스크립트로 웹 페이지를 동적으로 제어하기 위한 트리 구조의 모델입니다.
- 요소 선택 및 수정, 노드 추가 및 삭제, 이벤트 처리 등을 통해 HTML 문서를 동적으로 다룰 수 있습니다.
- 자바스크립트로 클래스, 스타일 등을 변경하여 웹 페이지를 동적으로 관리할 수 있습니다.
'Javascript' 카테고리의 다른 글
Fetch API (0) | 2024.11.11 |
---|---|
백틱(Backtick, ```) (0) | 2024.10.14 |
프로퍼티(Property)와 메서드(Method) 그리고 배열(Arrays) (0) | 2024.10.04 |
이벤트(Event)와 이벤트 처리기(Event Handler) (0) | 2024.10.04 |
자바스크립트 기초 정리 (0) | 2024.10.04 |