자바스크립트 DOM Node

DOM은 HTML 문서의 계층 구조를 트리 형태로 표현하고 각 요소를 DOM 노드(DOM Node)로 다룹니다.

DOM(Document Object Model)은 웹 페이지의 구조를 표현하는 객체 모델입니다.

HTML 문서의 요소들을 자바스크립트에서 객체 형태로 다룰 수 있으며 웹 페이지와 상호작용할 수 있습니다.

DOM Node 기본 개념

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>DOM 예제</title>
</head>
<body>
  <div id="container">
    <h1>제목</h1>
    <p class="description">이것은 본문 내용입니다.</p>
  </div>
</body>
</html>

위의 예시와 같이 HTML 문서는 노드로 구성됩니다.

DOM Node 접근 방법

자바스크립트로 HTML 요소에 접근하려면 document 객체를 사용해야 합니다.

document 객체는 전체 문서의 DOM을 나타내며, 다양한 메소드를 제공합니다.

// id로 요소 접근
let div = document.getElementById('container'); // <div id="container">에 접근

// 클래스명으로 요소 접근
let paragraph = document.querySelector('.description'); // <p class="description">에 접근

// 태그명으로 요소 접근
let heading = document.querySelector('h1'); // <h1>에 접근

요소에 접근하는 방법은 위의 예제와 같이 다양한 방법이 있습니다.

먼저 getElementById() 메소드를 사용하여 특정 id를 가진 요소에 접근할 수 있습니다.

다른 방법으로 특정 클래스명을 가진 요소에 접근하고 싶으면 querySelector() 같은 메소드에 CSS Selector를 사용하여 접근할 수도 있습니다.

Node 속성 읽고 수정하기

각각의 노드는 다양한 속성과 메소드를 제공합니다.

element

// 요소의 속성 읽기
let id = div.id; // "container"
let className = paragraph.className; // "description"

// 요소의 속성 수정하기
div.id = 'new-container'; // id 변경
paragraph.className = 'new-description'; // 클래스 변경

이전 섹션에서 접근한 요소에서는 id, className 같은 속성을 읽을 수 있습니다.

값을 수정하려면 속성에 원하는 값을 할당하면 됩니다.

text

// 텍스트 노드 읽기
let headingText = heading.textContent; // "제목"

// 텍스트 노드 수정하기
heading.textContent = '새로운 제목'; // 텍스트 내용 변경

텍스트 노드는 textContent 또는 innerText 속성을 사용하여 접근할 수 있습니다.

Node 추가 및 삭제

// 새로운 텍스트 생성
let newText = document.createTextNode('새로운 텍스트');

// 새로운 요소 생성
let newParagraph = document.createElement('p');
newParagraph.textContent = '이것은 새로운 문단입니다.';

// 새로운 노드 DOM에 추가
div.appendChild(newParagraph); // <div id="container">에 새로운 <p> 추가

요소를 추가하려면 appendChild() 메소드를 사용하여 DOM에 새로 생성한 요소를 추가할 수 있습니다.

참고로 요소를 생성하려면 createElement() 메소드를 사용하면 됩니다.

이렇게 자바스크립트로 생성된 요소는 바로 DOM에 추가되지 않으므로 appendChild() 등으로 하나하나 추가해야합니다.

// 기존의 <p class="description"> 노드를 삭제
div.removeChild(paragraph); // <div id="container">에서 <p class="description"> 제거

반대로 요소를 제거하려면 removeChild() 메소드를 사용하면 됩니다.

이 메소드는 DOM 트리에 추가되어 있는 요소를 DOM에서 제거하는 역할을 합니다.

DOM 트리 탐색

// 부모 노드 접근
let parentNode = paragraph.parentNode; // <div id="container">

// 자식 노드 접근
let firstChild = div.firstChild; // <h1> 요소

// 형제 노드 접근
let nextSibling = heading.nextElementSibling; // <p class="description">

특정 요소를 기준으로 DOM 트리를 탐색할 수 있습니다.

부모 노드에 접근하고 싶으면 parentNode로 접근하고, 자식 노드는 firstChild, children 등을 사용할 수 있습니다.

이벤트 리스너 추가

// 클릭 이벤트 리스너 추가
heading.addEventListener('click', function() {
  alert('제목이 클릭되었습니다!');
});

요소에 이벤트를 추가하고 싶으면 addEventListener() 메소드를 사용합니다.

첫 번째 매개변수로 ‘click’을 넣으면 클릭 이벤트를 추가할 수 있습니다.

두 번째 매개변수에는 클릭을 한 경우 실행될 스크립트를 지정합니다.

정리

DOM은 자바스크립트를 사용하여 HTML 페이지를 동적으로 조작할 수 있게 해줍니다.

DOM 노드를 사용하면 HTML 요소, 텍스트, 속성 등을 다루고, 이벤트를 처리하며, 페이지의 콘텐츠를 동적으로 변경할 수 있습니다.

DOM은 웹 개발에서 매우 중요한 개념이며, 이를 잘 이해하고 활용하면 더 효과적인 웹 애플리케이션을 개발할 수 있습니다.

관련 글

자바스크립트 튜토리얼