1 분 소요

DOM 노드에 대한 이해는 정밀한 DOM 조작의 핵심입니다. 이 글에서는 노드(Node)의 개념부터, nodeType 검사로 공백/텍스트 노드 문제 해결까지 한눈에 정리해드립니다.


✅ 노드 접근이란?

  • 노드(Node): HTML의 모든 구성 요소 (요소, 텍스트, 속성, 주석 등)
  • DOM 조작의 대상 = 노드
  • 노드 간 계층적 관계를 통해 원하는 위치 탐색 가능

1️⃣ 노드 선택 방법

🔸 A. 태그 이름으로 선택

let items = document.getElementsByTagName("li");
items[0].style.color = "red";
  • 반환: HTMLCollection → 인덱스로 접근 가능

🔸 B. 노드 간 관계로 접근

속성 설명
parentNode 부모 노드
childNodes 모든 자식 노드 (텍스트 포함)
children 요소 노드만 포함 (추천)
firstChild / lastChild 첫/마지막 자식 노드
nextSibling / previousSibling 형제 노드 접근
let firstNode = document.getElementById("list").firstChild;

⚠️ 줄바꿈(\n)은 #text 노드로 인식될 수 있으므로 주의


2️⃣ 노드 정보 확인

🔸 A. nodeName

노드의 이름(태그명/타입명) 반환 (읽기 전용)

노드 nodeName
문서 노드 #document
요소 노드 "DIV" 등 대문자
텍스트 노드 #text
주석 노드 #comment
console.log(document.body.nodeName); // "BODY"

🔸 B. nodeValue

노드 nodeValue
요소 노드 null
텍스트 노드 텍스트 문자열
속성 노드 속성 값
let txt = document.getElementById("title").firstChild.nodeValue;

🔸 C. nodeType

노드 코드
요소 1
속성 2
텍스트 3
주석 8
문서 9
let type = document.getElementById("title").firstChild.nodeType;

3️⃣ 공백 / 줄바꿈 문제 해결

문제: HTML 코드에 줄바꿈이 있으면 firstChild, lastChild텍스트 노드(#text)가 됨

<ul id="list">
  <li>1</li>
  <li>2</li>
</ul>
let ul = document.getElementById("list");
console.log(ul.lastChild); // #text일 수 있음!

✅ 해결: nodeType 체크

function findLastElementChild(parent) {
  let node = parent.lastChild;
  while (node && node.nodeType !== 1) {
    node = node.previousSibling;
  }
  return node;
}

🧠 실전 예시

<ul id="fruits">
  <li>🍎 사과</li>
  <li>🍌 바나나</li>
  <li>🍇 포도</li>
</ul>
let list = document.getElementById("fruits");
let node = list.lastChild;

while (node.nodeType !== 1) {
  node = node.previousSibling;
}
console.log(node.textContent); // "🍇 포도"

✅ 핵심 요약표

목적 속성/메서드 설명
노드 이름 nodeName DIV, #text
노드 값 nodeValue 텍스트 노드 내용 등
노드 타입 nodeType 숫자로 반환 (1: 요소, 3: 텍스트 등)
부모/자식 parentNode, childNodes, children 트리 탐색
형제 탐색 nextSibling, previousSibling 공백도 포함됨
요소만 탐색 children, Element 전용 속성 nodeType === 1 검사

질문 정리

질문 답변
firstChild가 왜 텍스트일까요? 줄바꿈/공백은 텍스트 노드입니다
텍스트 노드 건너뛰려면? nodeType === 1 조건으로 검사하세요
텍스트만 접근하려면? el.firstChild.nodeValue
요소만 반복하려면? el.children, for...of, forEach 사용

카테고리:

업데이트:

댓글남기기