JavaScript - DOM 노드 목록

DOM 노드 목록에 대한 소개

안녕하세요, 웹 개발자 지망생 여러분! 오늘 우리는 JavaScript DOM 노드 목록의 세계로 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 저는 여러분의 친절한 가이드가 되겠습니다. 우리는 단계별로 진행하겠습니다. 이 튜토리얼의 끝을 맺을 때, 여러분은 프로처럼 웹 페이지를 조작할 수 있을 것입니다!

JavaScript - DOM Node Lists

DOM 노드 목록이란?

들어가기 전에 기본 개념부터 시작해보겠습니다. 웹 페이지를 가족 트리로 상상해보세요. DOM(문서 객체 모델)은 웹 페이지의 가족 트리와 같습니다. 페이지에 있는 각 요소 - 문단, 버튼, 이미지 등이 이 가족의 일원이거나, 기술적인 용어로는 "노드"입니다.

노드 목록은 이러한 노드들의 모음입니다. 파티에 초대된 손님 명단과 같이, 각 손님은 웹 페이지의 요소입니다.

예제 1: 노드 목록 가져오기

간단한 예제를 보겠습니다:

<div>
<p>문단 1</p>
<p>문단 2</p>
<p>문단 3</p>
</div>

<script>
let paragraphs = document.querySelectorAll('p');
console.log(paragraphs);
</script>

이 예제에서 querySelectorAll('p')은 모든 <p> 요소를 포함한 노드 목록을 반환합니다. 브라우저 콘솔에서 이를 실행하면 다음과 같은 것을 볼 수 있습니다:

NodeList(3) [p, p, p]

이는 우리가 3개의 문단 요소를 포함한 노드 목록을 가지고 있음을 의미합니다.

노드 목록과의 작업

이제 우리는 노드 목록을 가지고 있으니, 무엇을 할 수 있는지 살펴보겠습니다!

예제 2: 노드 목록 반복

let paragraphs = document.querySelectorAll('p');

paragraphs.forEach((paragraph, index) => {
console.log(`문단 ${index + 1}: ${paragraph.textContent}`);
});

이 코드는 다음과 같은 출력을 보여줍니다:

문단 1: 문단 1
문단 2: 문단 2
문단 3: 문단 3

여기서 우리는 forEach 메서드를 사용하여 노드 목록의 각 문단을 반복하고 있습니다. 파티 손님 명단을 돌아다니며 각 손님을 인사하는 것과 같습니다!

동적 vs 정적 노드 목록의 마법

이제 흥미로운 부분으로 넘어가겠습니다. 노드 목록은 동적이거나 정적일 수 있습니다.

동적 노드 목록은 마법의 손님 명단처럼, 사람들이 도착하거나 떠날 때 자동으로 업데이트됩니다. 반면, 정적 노드 목록은 특정 순간의 손님 명단의 스냅샷과 같아서, 새로운 손님들이 도착해도 변하지 않습니다.

예제 3: 동적 노드 목록

<ul id="guestList">
<li>Alice</li>
<li>Bob</li>
</ul>

<script>
let guests = document.getElementsByTagName('li');
console.log(guests.length); // 출력: 2

let newGuest = document.createElement('li');
newGuest.textContent = 'Charlie';
document.getElementById('guestList').appendChild(newGuest);

console.log(guests.length); // 출력: 3
</script>

이 예제에서 getElementsByTagName은 동적 노드 목록을 반환합니다. Charlie를 목록에 추가하면, 우리의 guests 노드 목록이 자동으로 업데이트됩니다!

예제 4: 정적 노드 목록

<ul id="guestList">
<li>Alice</li>
<li>Bob</li>
</ul>

<script>
let guests = document.querySelectorAll('li');
console.log(guests.length); // 출력: 2

let newGuest = document.createElement('li');
newGuest.textContent = 'Charlie';
document.getElementById('guestList').appendChild(newGuest);

console.log(guests.length); // 여전히 출력: 2
</script>

여기서 querySelectorAll은 정적 노드 목록을 반환합니다. Charlie를 추가해도, 우리의 guests 노드 목록은 변하지 않습니다. 마치 손님 명단의 사진을 찍고 그 사진이 새로운 손님들이 도착해도 업데이트되지 않는 것과 같습니다.

HTMLCollection과 NodeList의 차이

이제 DOM 가족의 두 가지 사촌에 대해 이야기해보겠습니다: HTMLCollection과 NodeList. 그들은 비슷하지만, 각자 독특한 특성을 가지고 있습니다.

HTMLCollection

HTMLCollection은 항상 동적입니다. 손님 명단이 항상 업데이트되는 마법의 명단과 같습니다.

let divs = document.getElementsByTagName('div'); // HTMLCollection 반환

NodeList

NodeList는 생성 방식에 따라 동적이거나 정적일 수 있습니다.

let paragraphs = document.querySelectorAll('p'); // 정적 NodeList 반환
let childNodes = document.body.childNodes; // 동적 NodeList 반환

그들의 차이를 요약한 표입니다:

기능 HTMLCollection NodeList
동적/정적 항상 동적 동적 또는 정적
내용 요소 노드만 모든 노드 타입 포함
항목 접근 이름, id, 인덱스로 인덱스로만
forEach 메서드 사용 불가 사용 가능

결론

이제 여러분은 DOM 노드 목록의 땅을 거쳐, 기본 개념에서 동적과 정적 목록의 미묘한 차이에 이르기까지 여행을 마쳤습니다. 연습이 완벽을 만듭니다. 이 예제를 시도해보고, 그것을 실험해보세요. 곧 경험 많은 개발자처럼 웹 페이지를 조작할 수 있을 것입니다!

우리가 헤어지기 전, 작은 웹 개발자 장난을 하나 드릴게요: 왜 JavaScript 개발자가 안경을 썼을까요? 그는 C#을 볼 수 없었기 때문입니다! (이해하셨나요? C 샤프? 그래도 나가겠습니다...:]

Keep coding, keep learning, and most importantly, keep having fun with JavaScript!

Credits: Image by storyset