본문 바로가기
자바스크립트

[자바스크립트] 부모 노드, 자식 노드, 형제 노드 찾기

by 세바개님 2023. 3. 11.

자바스크립트에서는 DOM(Document Object Model)을 통해 HTML 문서의 요소(element)를 조작할 수 있습니다. 부모 노드, 형제 노드, 자식 노드를 찾는 방법은 다음과 같습니다.

1. 부모 노드 찾기


부모 노드는 parentNode 속성으로 찾을 수 있습니다. 예를 들어, 아래 HTML 코드가 있다고 가정해봅시다.

<div id="parent">
  <p>부모 노드</p>
</div>


이 때, 부모 노드를 찾기 위해서는 다음과 같이 코드를 작성할 수 있습니다.

const parent = document.querySelector('#parent');
const parentNode = parent.parentNode;
console.log(parentNode); // <body> 요소


2. 형제 노드 찾기


형제 노드는 previousSibling과 nextSibling 속성으로 찾을 수 있습니다. 이 때, 빈 공백이나 줄바꿈도 하나의 형제 노드로 취급됩니다. 예를 들어, 아래 HTML 코드가 있다고 가정해봅시다.

<div id="parent">
  <p>첫 번째 자식 노드</p>
  <span>두 번째 자식 노드</span>
  <p>세 번째 자식 노드</p>
</div>


이 때, 두 번째 자식 노드의 이전 형제 노드와 다음 형제 노드를 찾기 위해서는 다음과 같이 코드를 작성할 수 있습니다.

const secondChild = document.querySelector('#parent span');
const previousSibling = secondChild.previousSibling;
const nextSibling = secondChild.nextSibling;
console.log(previousSibling); // <p>첫 번째 자식 노드</p>
console.log(nextSibling); // <p>세 번째 자식 노드</p>

3. 자식 노드 찾기


자식 노드는 childNodes 속성으로 찾을 수 있습니다. 이 때, 빈 공백이나 줄바꿈도 하나의 자식 노드로 취급됩니다. 예를 들어, 아래 HTML 코드가 있다고 가정해봅시다.

<div id="parent">
  <p>첫 번째 자식 노드</p>
  <span>두 번째 자식 노드</span>
  <p>세 번째 자식 노드</p>
</div>


이 때, 부모 노드의 모든 자식 노드를 찾기 위해서는 다음과 같이 코드를 작성할 수 있습니다.

const parent = document.querySelector('#parent');
const childNodes = parent.childNodes;
console.log(childNodes); // NodeList [text, <p>, text, <span>, text, <p>, text]


위 코드에서 NodeList는 유사배열(array-like) 객체로, childNodes를 통해 부모 노드의 자식 노드를 모두 가져왔습니다. 하지만 이 때, 빈 공백이나 줄바꿈도 하나의 자식 노드로 취급되기 때문에, 실제 자식 노드를 찾으려면 태그명을 확인해야 합니다. 예를 들어, 위 코드에서 태그명이 'p'인 자식 노드만 가져오기 위해서는 다음과 같이 코드를 작성할 수 있습니다.

const parent = document.querySelector('#parent');
const childNodes = parent.childNodes;
const filteredChildNodes = [];

for (let i = 0; i < childNodes.length; i++) {
  if (childNodes[i].nodeName === 'P') {
    filteredChildNodes.push(childNodes[i]);
  }
}

console.log(filteredChildNodes); // [ <p>첫 번째 자식 노드</p>, <p>세 번째 자식 노드</p> ]


위 코드에서는 for 루프를 사용해서 childNodes의 각 요소의 nodeName(태그명)이 'p'인 경우, filteredChildNodes 배열에 추가하도록 했습니다. 이렇게 하면 부모 노드의 'p' 태그를 가진 모든 자식 노드를 가져올 수 있습니다.

그 외에도 자바스크립트에서는 querySelector, querySelectorAll, getElementsByClassName, getElementsByTagName 등의 메서드를 통해 요소를 선택하고 조작할 수 있습니다. 이 중에서 querySelector는 CSS 선택자를 사용해서 요소를 선택할 수 있으므로, 매우 유용한 메서드입니다. 예를 들어, 위 코드에서 태그명이 'p'인 자식 노드를 찾는 코드를 querySelectorAll을 사용해서 다음과 같이 작성할 수도 있습니다.

const parent = document.querySelector('#parent');
const filteredChildNodes = parent.querySelectorAll('p');
console.log(filteredChildNodes); // NodeList [ <p>첫 번째 자식 노드</p>, <p>세 번째 자식 노드</p> ]


위 코드에서는 부모 노드에서 태그명이 'p'인 요소를 모두 선택해서 filteredChildNodes에 저장하도록 했습니다. 이렇게 하면 더 간단하게 자식 노드를 찾을 수 있습니다.

댓글