본문 바로가기
개발/웹 개발

Day 15: JavaScript와 DOM

1. 오늘의 학습 목표

학습 목표: JavaScript를 사용하여 HTML 문서를 객체 모델로 표현한 DOM(Document Object Model)을 이해합니다. DOM 요소를 선택하고, 내용을 변경하며, 사용자의 클릭과 같은 이벤트(Event)에 반응하여 동적인 웹 페이지를 만드는 방법을 배웁니다.

핵심 요약: DOM 조작과 이벤트 처리는 정적인 HTML 문서를 사용자와 상호작용하는 살아있는 웹 애플리케이션으로 만드는 핵심 기술입니다.


2. 핵심 개념 파헤치기

2.1. DOM이란?

DOM은 브라우저가 HTML 웹 페이지를 해석하여 만든, 문서의 구조화된 표현입니다. 브라우저는 HTML 태그들을 나무(Tree) 구조의 객체로 변환하는데, JavaScript는 이 객체 모델에 접근하여 문서의 구조, 스타일, 내용 등을 변경할 수 있습니다. 즉, DOM은 JavaScript가 HTML을 제어할 수 있게 해주는 다리 역할을 합니다.

 

2.2. DOM 요소 선택하기 

JavaScript로 HTML 요소를 조작하려면, 먼저 원하는 요소를 선택해야 합니다

  • document.getElementById('id이름'): 주어진 id를 가진 요소를 선택합니다. (가장 빠름)
  • document.querySelector('CSS선택자'): 주어진 CSS 선택자와 일치하는 첫 번째 요소를 선택합니다. (매우 유연하고 강력함)
  • document.querySelectorAll('CSS선택자'): 주어진 CSS 선택자와 일치하는 모든 요소를 NodeList(배열과 유사) 형태로 반환합니다

2.3. DOM 조작하기 

요소를 선택했다면, 다양한 속성을 이용해 내용을 변경하거나 스타일을 바꿀 수 있습니다.

  • .textContent: 요소 안의 텍스트 내용만 변경합니다.
  • .innerHTML: 요소 안의 HTML 구조 자체를 변경합니다. (보안상 주의 필요)
  • .style: 요소의 인라인 스타일을 변경합니다. (예: element.style.color = 'red';)
  • .setAttribute('속성이름', '값'): 요소의 속성(attribute) 값을 변경합니다.

2.4. 이벤트 처리)

이벤트는 웹 페이지에서 발생하는 사용자의 행동(클릭, 키보드 입력 등)이나 상태의 변화를 의미합니다. JavaScript는 이러한 이벤트를 감지하고 특정 코드를 실행할 수 있습니다.

  • 이벤트 리스너: 특정 요소에서 발생하는 이벤트를 '듣고' 있다가, 이벤트가 발생하면 지정된 함수(이벤트 핸들러)를 실행하는 역할입니다.
  • element.addEventListener: 이벤트를 등록하는 가장 현대적이고 표준적인 방법입니다.

3. 코드로 배우기

3.1. 구현 목표

버튼을 클릭하면 페이지의 제목 텍스트와 색상이 바뀌는 간단한 상호작용을 구현합니다.

 

3.2. [1단계: 상호작용을 위한 HTML 구조 만들기]

JavaScript로 선택할 수 있도록 id를 가진 <h1> 태그와 <button> 태그를 만듭니다.

<h1 id="main-title">Hello, JavaScript!</h1>
<button id="change-btn">Click Me!</button>

 

3.3. [2단계: JavaScript로 DOM 요소 선택하기]

querySelector를 사용하여 <h1> 요소와 <button> 요소를 변수에 저장합니다.

const titleElement = document.querySelector('#main-title');
const changeButton = document.querySelector('#change-btn');

 

3.4. [3단계: 버튼에 이벤트 리스너 추가하기]

버튼에 click 이벤트가 발생했을 때 실행될 함수를 addEventListener를 이용해 등록합니다.

changeButton.addEventListener('click', () => {
  //버튼이 클릭되면 이 안의 코드가 실행됩니다.
});

 

3.5. [4단계: 이벤트 발생 시 DOM 조작하기]

이벤트 리스너 함수 안에서, titleElement의 textContent와 style을 변경하는 코드를 작성합니다.

changeButton.addEventListener('click', () => {
  titleElement.textContent = 'DOM is controlled!';
  titleElement.style.color = 'blue';
});


4. 전체 코드

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>JS DOM Manipulation</title>
</head>
<body>
  <h1 id="main-title">Hello, JavaScript!</h1>
  <button id="change-btn">Click Me!</button>

  <script>
    //1. DOM 요소 선택
    const titleElement = document.querySelector('#main-title');
    const changeButton = document.querySelector('#change-btn');

   	 //2. 이벤트 리스너 등록
    changeButton.addEventListener('click', () => {
        	//3. 이벤트 발생 시 실행될 로직 (DOM 조작)
      console.log('버튼이 클릭되었습니다!');
      titleElement.textContent = 'DOM is now controlled by JavaScript!';
      titleElement.style.color = 'tomato';
      titleElement.style.backgroundColor = '#f0f0f0';
    });
  </script>
</body>
</html>