지난번에는 node와 element의 차이에 대해서 정리해보았습니다. 이번에는 dom에서 부모, 자식, 형제 노드(node)와 요소(element)를 탐색하는 방법을 정리해 보도록 하겠습니다.
1. node(노드) 탐색하기dom은 node의 계층 구조로 이루어져 있습니다. 따라서, node에는 element, text, comment 등 여러 항목이 포함되어 있다는 것에 주의하세요. node의 부모, 형제, 자식은 아래 표와 같은 속성을 통해 접근할 수 있습니다. 부모(parent) 노드 탐색
자식(child) 노드 탐색
형제(sibling) 노드 탐색
예제
이 예제는 <li> 노드인 'my_li' 노드를 중심으로 부모, 자식, 형제 노드를 찾는 예제입니다. const parentNode = my_li.parentNode; 여기서 'my_li' 노드의 부모 노드는 'ul' 노드입니다. const firstChildNode = my_li.firstChild; const lastChildNode = my_li.lastChild; 'my_li' 노드의 첫번째 자식 노드와 마지막 자식 노드를 찾고 있습니다. 'my_li' 노드인 <li> 태그는, 하위에 3개의 <p> 자식 태그를 가지고 있습니다. 그렇다면, 'my_li' 노드의 첫번째 자식 노드와 마지막 자식 노드는 <p>를 나타내는 pharagraph여야 할 것 같은데, 여기서는 'text'로 결과가 출력되었습니다. 왜 일까요? node는 <p> 태그와 같은 element 뿐만아니라, text, comment 등의 다른 항목들을 모두 포함합니다. 우리가 탐색하고 있는 html 코드를 다시 한번 볼까요?
'<li id='my_li'>' 뒤에 바로 '<p>바나나1</p>'가 있는 것 같지만, 사실 '<li id='my_li'>' 코드 뒤에는 줄바꿈 텍스트가 있습니다. 이 줄바꿈 텍스트도 node입니다. 만약, 이 줄바꿈 텍스트를 모두 삭제하고 다음과 같이 코드를 작성하면,
my_li의 첫번째 자식 노드는 <p>태그를 나타내는 pharagraph가 됩니다. const childNodes = my_li.childNodes; childNodes 속성은, 해당 노드의 모든 자식 노드들을 NodeList 형태로 리턴합니다. firstChild, lastChild의 경우와 마찬가지로 여기서 리턴되는 NodeList에는 element 뿐만 아니라, 텍스트 노드도 포함됩니다. 따라서, 이 예제에서 자식 노드의 갯수는 7개 이고, 자식 노드들은 Text와 Pharagraph로 이루어진 것을 확인 할 수 있습니다. const prevNode = my_li.previousSibling; const nextNode = my_li.nextSibling; my_li 노드와 같은 레벨의 노드들 중, 바로 앞의 노드와 뒤의 노드를 리턴합니다. 앞에서 설명한 바와 같이, node는 element 뿐만 아니라, 모든 text 노드를 포함하기 때문에 my_li의 앞뒤 형제 노드는 줄바꿈 텍스트입니다. 보통 javascript에서 dom을 조작하거나 탐색할 때 사용자는 주석, 공백 텍스트, 줄바꿈 텍스트 등을 조작하기 보다는, <p>, <div>, <table> 등의 element를 조작하고 탐색하고 싶어합니다. 그래서 보통 dom을 조작할 때는 node를 탐색하기 보다는 element를 탐색하고 조작합니다. 다음은 부모, 자식, 형제 element를 탐색하는 방법입니다. 2. element(요소) 탐색하기node에는 텍스트, element, 주석 등 여러 타입이 있는데, element는 여러 node 타입 중 한 종류입니다. element는 <p>, <div>, <a>와 같은 태그를 사용해서 작성된 노드입니다. 부모(parent) 요소(element) 탐색
자식(child) 요소(element)탐색
형제(sibling) 요소(element)탐색
예제
이 예제는 이전의 예제와 마찬가지로 <li> 태그를 가지는 'my_li' 노드를 중심으로 부모, 형제, 자식 element를 탐색하는 예제입니다. const parentElement = my_li.parentElement; 'my_li'의 부모 element는 'ul' element입니다. const firstElementChild = my_li.firstElementChild; const lastElementChild = my_li.lastElementChild; 'my_li'의 첫번째 자식 element는 '바나나1' 텍스트를 가지는 pharagraph(<p>바나나1</p>)입니다. 'my_li'의 마지막 자식 element는 '바나나3' 텍스트를 가지는 pharagraph(<p>바나나3</p>)입니다. const children = my_li.children; 'my_li' element의 모든 자식 element 목록을 HTMLCollection 형태로 가져옵니다. 'my_li' element의 자식 element는 3개의 'li' element입니다. (여러 node중 element만 읽어들입니다.) const prevElement = my_li.previousElementSibling; const nextElement = my_li.nextElementSibling; 'my_li' element와 동일한 레벨의 element 중 바로 이전 element와 바로 다음의 element를 탐색합니다. javascript에서 부모, 자식, 형제 node를 탐색하는 방법과 보모, 자식, 형제 element를 탐색하는 방법을 알아보았습니다. |