JavaScript

DOM Selection and Manipulation

lshjju 2026. 2. 14. 15:28

웹 페이지의 특정 부분을 바꾸려면 먼저 그 부분을 '선택'해야 합니다.

자바스크립트에서 DOM 요소에 접근하고 그 내용을 수정하는 대표적인 방법들을 정리해 드릴게요.


📘 1. DOM 요소에 접근하기 (Selection)

브라우저가 만든 DOM 트리에서 우리가 원하는 요소를 찾아내는 방법입니다.

① getElement로 시작하는 방식 (전통적 방식)

가장 빠르고 명확한 방법으로, 특정 조건에 맞는 요소를 직접 지칭합니다.

  • getElementById('아이디'): HTML의 id 속성을 이용해 단 하나의 요소를 찾습니다.
  • getElementsByClassName('클래스명'): 해당 클래스를 가진 모든 요소를 선택하여 리스트(HTMLCollection) 형태로 가져옵니다.
  • getElementsByTagName('태그명'): <div>, <li> 같은 태그 이름을 기준으로 모두 선택합니다.

② querySelector() (현대적 방식)

CSS 선택자 문법을 그대로 사용하여 요소를 선택하는 아주 강력하고 유연한 메서드입니다.

  • querySelector('선택자'): 조건에 부합하는 요소 중 가장 첫 번째 것 하나만 가져옵니다.
    • 예: document.querySelector('.my-class'), document.querySelector('#my-id')

③ querySelectorAll() (전체 선택 방식)

  • querySelectorAll('선택자'): 조건에 부합하는 모든 요소를 찾아 리스트(NodeList) 형태로 가져옵니다.
  • 가져온 결과는 배열과 비슷하게 다룰 수 있어 반복문(forEach 등)을 사용하기 좋습니다.

📘 2. DOM 내용 수정하기 (Manipulation)

요소를 선택했다면, 이제 그 안의 내용을 바꿀 차례입니다.

  • textContent: 요소 안의 텍스트만을 가져오거나 변경합니다. (HTML 태그를 문자로 취급하여 안전합니다.)
  • innerHTML: 요소 안의 HTML 태그를 해석하여 변경합니다. (새로운 태그를 삽입할 때 유용하지만 보안상 주의가 필요합니다.)

🖥️ 실전 예제 코드

학생들이 직접 따라 해 볼 수 있는 실습 코드입니다.

HTML
 
<h1 id="title">기존 제목</h1>
<p class="desc">첫 번째 설명</p>
<p class="desc">두 번째 설명</p>

<script>
    // 1. ID로 접근해서 텍스트 바꾸기
    const mainTitle = document.getElementById('title');
    mainTitle.textContent = '반가워요, 자바스크립트!';

    // 2. 클래스로 접근해서 첫 번째 내용만 바꾸기
    const firstDesc = document.querySelector('.desc');
    firstDesc.style.color = 'blue';

    // 3. 모든 클래스 요소를 선택해서 한꺼번에 바꾸기
    const allDescs = document.querySelectorAll('.desc');
    allDescs.forEach((el, index) => {
        el.innerHTML = `<b>${index + 1}번 설명입니다.</b>`;
    });
</script>

오늘의 요약

  • 특정한 하나를 빠르게 찾을 땐 **getElementById**가 좋다.
  • CSS 선택자처럼 유연하게 찾고 싶을 땐 **querySelector**가 대세다.
  • 여러 개를 동시에 다루고 싶다면 **querySelectorAll**을 사용한다.
  • 단순 글자 수정은 textContent, 태그 삽입은 **innerHTML**을 사용한다.

DOM 접근과 수정의 기본기를 모두 담았습니다!


'JavaScript' 카테고리의 다른 글

BOM  (0) 2026.02.14
DOM  (0) 2026.02.14
DOM Event Handling  (0) 2026.02.14
DOM Node  (0) 2026.02.14
DOM class property  (0) 2026.02.14