본문 바로가기
Study/JS

JavaScript 기초 강의 2편: DOM 조작과 이벤트 처리

by wawManager 2024. 12. 2.
728x90

1. DOM이란?

DOM(Document Object Model)은 웹 페이지의 구조를 트리 형태로 표현한 것입니다. 각 HTML 요소는 DOM의 노드로 변환되며, JavaScript는 이 DOM을 통해 페이지의 콘텐츠와 구조를 동적으로 조작할 수 있습니다.

예를 들어, 아래와 같은 HTML 구조가 있다면:

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>DOM 기초</title>
</head>
<body>
    <h1 id="main-title">Hello, World!</h1>
    <p class="description">이것은 JavaScript DOM 조작 예제입니다.</p>
</body>
</html>

DOM은 다음과 같은 트리 구조로 표현됩니다:

- html
  - head
    - title
  - body
    - h1#main-title
    - p.description

2. DOM 요소 선택

DOM 요소를 선택하려면 JavaScript에서 제공하는 다양한 메서드를 사용할 수 있습니다.

1) getElementById

id 속성을 기준으로 요소를 선택합니다.

const title = document.getElementById("main-title");
console.log(title); // <h1 id="main-title">Hello, World!</h1>

2) querySelector와 querySelectorAll

CSS 선택자와 동일한 문법을 사용하여 요소를 선택할 수 있습니다. querySelector는 첫 번째 일치하는 요소 하나를 반환하고, querySelectorAll은 모든 일치하는 요소의 NodeList를 반환합니다.

const paragraph = document.querySelector(".description");
console.log(paragraph); // <p class="description">이것은 JavaScript DOM 조작 예제입니다.</p>

const allParagraphs = document.querySelectorAll("p");
console.log(allParagraphs); // NodeList(모든 <p> 요소)

3) getElementsByClassName과 getElementsByTagName

클래스나 태그 이름을 기준으로 요소를 선택합니다.

const descriptions = document.getElementsByClassName("description");
console.log(descriptions[0]); // 첫 번째 <p class="description"> 요소

const headings = document.getElementsByTagName("h1");
console.log(headings[0]); // 첫 번째 <h1> 요소

3. DOM 요소 조작

선택한 요소의 내용을 변경하거나 스타일을 추가하는 방법을 알아보겠습니다.

1) 요소 내용 변경

textContent와 innerHTML을 사용하여 요소의 텍스트나 HTML 콘텐츠를 변경할 수 있습니다.

const title = document.getElementById("main-title");
title.textContent = "Hello, JavaScript!"; // 텍스트만 변경
title.innerHTML = "<span>Hello, <strong>JavaScript!</strong></span>"; // HTML 태그 포함 가능

2) 스타일 조작

style 속성을 사용하여 요소의 인라인 스타일을 추가할 수 있습니다.

const title = document.getElementById("main-title");
title.style.color = "blue";
title.style.fontSize = "36px";

3) 클래스 추가 및 제거

classList를 사용하여 클래스 이름을 동적으로 추가, 제거, 토글할 수 있습니다.

title.classList.add("highlight"); // 클래스 추가
title.classList.remove("highlight"); // 클래스 제거
title.classList.toggle("active"); // 클래스가 있으면 제거, 없으면 추가

4. 이벤트 처리

JavaScript에서는 다양한 이벤트를 감지하고 이를 처리할 수 있습니다. 클릭, 마우스 이동, 키보드 입력 등 다양한 이벤트가 있으며, 이벤트가 발생했을 때 특정 함수(이벤트 핸들러)를 실행할 수 있습니다.

1) 이벤트 리스너 추가

addEventListener 메서드를 사용해 이벤트를 요소에 연결할 수 있습니다.

const button = document.querySelector("button");

button.addEventListener("click", () => {
    alert("버튼이 클릭되었습니다!");
});

2) 이벤트 객체 사용

이벤트 핸들러는 이벤트 객체를 통해 다양한 정보를 제공합니다.

button.addEventListener("click", (event) => {
    console.log(event.type); // 이벤트 타입 출력 (예: "click")
    console.log(event.target); // 이벤트가 발생한 요소 출력
});

3) 기본 이벤트 방지

폼 제출이나 링크 클릭 같은 기본 동작을 막기 위해 preventDefault() 메서드를 사용할 수 있습니다.

const link = document.querySelector("a");

link.addEventListener("click", (event) => {
    event.preventDefault(); // 링크 이동 방지
    alert("링크 클릭이 방지되었습니다.");
});

실전 예제: 간단한 버튼 클릭으로 텍스트 변경하기

HTML:

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>버튼 클릭 예제</title>
</head>
<body>
    <h1 id="main-title">클릭해보세요!</h1>
    <button id="change-text-button">텍스트 변경</button>

    <script src="example.js"></script>
</body>
</html>

JavaScript (example.js):

document.getElementById("change-text-button").addEventListener("click", () => {
    const title = document.getElementById("main-title");
    title.textContent = "JavaScript로 텍스트가 변경되었습니다!";
});

코드 설명

  • 버튼을 클릭하면 addEventListener로 연결된 이벤트 핸들러가 실행되어, 제목의 텍스트가 변경됩니다.

요약

이번 강의에서는 JavaScript로 DOM을 선택하고 조작하는 방법이벤트를 처리하는 기본적인 방법을 배웠습니다. DOM은 웹 페이지를 동적으로 조작할 수 있는 강력한 도구이며, 이벤트 핸들링을 통해 다양한 사용자 상호작용을 구현할 수 있습니다. 다음 강의에서는 JavaScript의 배열과 객체를 다루는 방법을 심화 학습해보겠습니다.

728x90