Computer >> 컴퓨터 >  >> 프로그래밍 >> HTML

HTML DOM childNodes 속성 완벽 정리 – 자식 노드 다루기

HTML DOM의 childNodes 속성은 특정 노드의 자식 노드들을 NodeList 객체 형태의 컬렉션으로 반환합니다. 반환된 노드들은 HTML 문서에 나타나는 순서 그대로 정렬되어 있으며, 0부터 시작하는 인덱스 번호를 통해 각 노드에 접근할 수 있습니다.

이 속성은 읽기 전용(read-only)이라는 점, 그리고 공백(whitespace)과 주석(comment)도 하나의 노드로 간주된다는 점을 반드시 기억해야 합니다. 실무에서 자식 노드 개수를 셀 때 의외의 결과가 나오는 대표적인 이유가 바로 이 공백 노드 때문입니다.

구문(Syntax)

childNodes 속성의 기본 구문은 다음과 같습니다.

elementNodeReference.childNodes;

예제(Example)

HTML DOM childNodes 속성의 동작을 확인할 수 있는 예제를 살펴보겠습니다.

<!DOCTYPE html>
<html>
<head>
<style>
    div {
       border: 1px solid blue;
       margin: 7px;
   }
</style>
</head>
<body>
<p>아래 버튼을 클릭하면 div 요소의 자식 노드를 확인할 수 있습니다.</p>
<button onclick="countNodes()">COUNT</button>
<div id="DIV1">
<p>첫 번째 p 요소 </p>
<p>두 번째 p 요소</p>
</div>
<p id="Sample"></p>
<script>
    function countNodes() {
       var x = document.getElementById("DIV1").childNodes.length;
       document.getElementById("Sample").innerHTML = "div 요소에는 "+x+"개의 자식 노드가 있습니다";
   }
</script>
</body>
</html>

실행 결과(Output)

위 코드를 실행하면 다음과 같은 화면이 나타납니다.

HTML DOM childNodes 속성 완벽 정리 – 자식 노드 다루기

COUNT 버튼을 클릭하면 아래와 같이 자식 노드의 개수가 표시됩니다.

HTML DOM childNodes 속성 완벽 정리 – 자식 노드 다루기

예제 상세 설명

위 예제의 동작 과정을 단계별로 살펴보겠습니다.

1. div 요소 생성 및 스타일 적용

id가 "DIV1"인 <div> 요소를 만들고 그 안에 두 개의 <p> 요소를 배치했습니다. 다른 요소들과 시각적으로 구분하기 위해 파란색 테두리와 마진을 적용했습니다.

여기서 중요한 포인트는, 각 요소를 서로 다른 줄에 작성하기 위해 엔터 키를 세 번 눌렀고, 이로 인해 <div> 태그 내부에 총 세 개의 공백(whitespace) 노드가 생성되었다는 사실입니다.

div {
    border: 1px solid blue;
    margin: 7px;
}
<div id="DIV1">
<p>첫 번째 p 요소 </p>
<p>두 번째 p 요소</p>
</div>

2. 버튼 생성 및 이벤트 연결

사용자가 클릭하면 countNodes() 함수를 실행하는 COUNT 버튼을 만들었습니다.

<button onclick="countNodes()">COUNT</button>

3. 자식 노드 개수 계산 및 출력

countNodes() 함수는 id가 "DIV1"인 요소, 즉 <div> 요소를 가져온 뒤 해당 요소의 childNodes.length 속성 값을 변수 x에 할당합니다.

<div> 태그 내부에는 공백 노드 세 개와 <p> 요소 두 개가 존재하므로, childNodes.length는 5를 반환합니다. 최종적으로 반환된 값은 innerHTML() 메서드를 통해 id가 "Sample"인 단락에 출력됩니다.

function countNodes() {
    var x = document.getElementById("DIV1").childNodes.length;
    document.getElementById("Sample").innerHTML = "div 요소에는 "+x+"개의 자식 노드가 있습니다";
}