E1 : JS둜 DOM 객체 νƒμƒ‰ν•˜κΈ°

2025. 9. 7. 03:54ㆍFront-end/JavaScript

λ°˜μ‘ν˜•

λͺ©μ°¨

1. DOM 탐색

2. μžμ‹ λ…Έλ“œ 탐색

3. 00


1. DOM 탐색

DOM의 λͺ¨λ“  연산은 document κ°μ²΄λ‘œλΆ€ν„° μ‹œμž‘ν•œλ‹€.

document κ°μ²΄λŠ” DOM에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ μ§„μž…μ μΈ μ…ˆμ΄λ‹€.

https://ldd6cr-adness.tistory.com/279

 

λ”°λΌμ„œ JS둜 HTML λ¬Έμ„œμ— μ ‘κ·Όν•  λ•ŒλŠ” documentλ₯Ό 톡해 μ ‘κ·Όν•œλ‹€.

html, body, head νƒœκ·Έμ— μ ‘κ·Όν•  수 μžˆλŠ” 속성듀은 각각 μ•„λž˜μ™€ κ°™λ‹€.

  • <html> : document.documentElement
  • <body> : document.body
  • <head> : document.head
<!DOCTYPE html>
<html>
  <head>
    <title>DOM 좜λ ₯ μ˜ˆμ‹œ</title>
    <script>
        console.log("document.body: " + document.body);	// null
    </script>
  </head>
  <body>
    <script>
      console.log("document.documentElement");
      console.log("document.head");
      console.log("document.body");
    </script>
  </body>
</html>

 

μœ„ μ˜ˆμ‹œμ—μ„œ <head> λ‚΄λΆ€μ—μ„œ document.bodyλ₯Ό μ ‘κ·Ό μ‹œλ„ν•˜λ©΄ null을 μ–»λŠ”λ‹€.

아직 읽지 μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ‘΄μž¬ν•˜μ§€ μ•ŠμŒμ„ λœ»ν•˜λŠ” null을 좜λ ₯ν•˜λŠ” 것이닀.

 


2. μžμ‹ λ…Έλ“œ 탐색

  • μžμ‹ λ…Έλ“œ (child node / children)
    - λ°”λ‘œ μ•„λž˜μ˜ μžμ‹ μš”μ†Œλ₯Ό νƒ€λ‚˜λ‚Έλ‹€.
    - <head>와 <body>λŠ” <html>의 μžμ‹ λ…Έλ“œ
  • 후손 λ…Έλ“œ (descendants)
    - μ€‘첩 관계에 μžˆλŠ” λͺ¨λ“  μš”μ†Œλ₯Ό μ˜λ―Έν•œλ‹€.
    - <div>, <ul>, <li> ... λŠ” <body>의 후손 λ…Έλ“œ

μžμ‹ λ…Έλ“œ, 후손 λ…Έλ“œλ₯Ό νƒμƒ‰ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 속성듀을 μ‚΄νŽ΄λ³΄μž.

μ•„λž˜ 속성듀은 λͺ¨λ‘ μ½κΈ° μ „μš©μ΄λ‹€.

λ˜ν•œ 거의 λŒ€λΆ€λΆ„μ˜ μƒν˜Έμ•„μ—μ„œ DOM μ»¬λ ‰μ…˜μ€ DOM의 ν˜„μž¬ μƒνƒœλ₯Ό μžλ™μœΌλ‘œ λ°˜μ˜ν•œλ‹€.

 

  • [element].childNodes : element의 λͺ¨λ“  μžμ‹ λ…Έλ“œλ₯Ό 담은 μ»¬λ ‰μ…˜(collection)
    e.g. document.body.childNodes → body의 λͺ¨λ“  μžμ‹ λ…Έλ“œλ₯Ό λ‹΄μŒ
  • [element].firstChild : element의 첫번째 μžμ‹ λ…Έλ“œ
  • [element].lastChild : element의 λ§ˆμ§€λ§‰ μžμ‹ λ…Έλ“œ
  • [element].hasChildNodes() : μžμ‹ λ…Έλ“œμ˜ 쑴재 μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•˜λŠ” ν•¨μˆ˜
for (let node of document.body.childNodes) {
  alert(node);	// μ»¬λ ‰μ…˜ λ‚΄μ˜ λͺ¨λ“  λ…Έλ“œλ₯Ό 보여쀀닀.
}

** μ»¬λ ‰μ…˜μ€ μ΄ν„°λŸ¬λΈ” μœ μ‚¬ λ°°μ—΄ 객체둜, for..ofλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. (배열은 μ•„λ‹ˆλ―€λ‘œ λ°°μ—΄ λ©”μ„œλ“œλ₯Ό μ“Έ 수 μ—†μŒ)
** μ»¬λ ‰μ…˜μ—λŠ” μΆ”κ°€ ν”„λ‘œνΌν‹°κ°€ μžˆμœΌλ―€λ‘œ, for..in은 μ ˆλŒ€λ‘œ μ‚¬μš©ν•˜λ©΄ μ•ˆλœλ‹€.

 


3. ν˜•μ œ λ…Έλ“œ

  • ν˜•μ œ λ…Έλ“œ (sibling)
    - 같은 λΆ€λͺ¨λ₯Ό κ°€μ§„ λ…Έλ“œ 관계이닀.
    - <head>와 <body>λŠ” ν˜•μ œ λ…Έλ“œ

ν˜•μ œ/ λΆ€λͺ¨ λ…Έλ“œμ— λŒ€ν•œ 정보에 μ ‘κ·Όν•˜λŠ” 속성듀을 μ•Œμ•„λ³΄μž.

  • [element].nextSibling : λ‹€μŒ ν˜•μ œ λ…Έλ“œμ— λŒ€ν•œ 정보
  • [element].previousSibling : μ΄μ „ ν˜•μ œ λ…Έλ“œμ— λŒ€ν•œ 정보
  • [element].parentNode : λΆ€λͺ¨ λ…Έλ“œμ— λŒ€ν•œ 정보
console.log( document.body.parentNode === document.document.Element);	// true
console.log( document.head.nextSibling );	// HTMLBodyElement
console.log( document.body.previousSibling );	// HTMLHeadElement

 

 

 

 

 

 

 

μ°Έκ³ 

더보기

참고자료링크

λ°˜μ‘ν˜•

'Front-end > JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

DOM λ…Έλ“œμ— λŒ€μ‘ν•˜λŠ” 클래슀  (0) 2025.09.22
E2 : μš”μ†Œ κ²€μƒ‰ν•˜κΈ°  (0) 2025.09.08
B23 : iterable 객체  (1) 2025.08.29
μ˜΅μ…”λ„ 체이닝 ?.  (1) 2025.08.29
B27: JSON λ©”μ„œλ“œ  (0) 2025.08.26