DOM

DOM์€ ๋ฌด์—‡์ธ๊ฐ€? DOM Node์™€ Element์˜ ์ฐจ์ด

์—ฌํ–‰์ž๋ณดํ—˜์˜ ๋ณด์žฅ๋ช…๊ณผ ๋ณด์žฅ๊ฐ€๊ฒฉ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์›นํฌ๋กค๋ง์„ ํ•ด๋ณด์•˜๋‹ค. ์‚ฌ์‹ค ์ด ๊ณผ์ •์€ ๊ทธ๋ƒฅ, html parsingํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ html์—์„œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์ „๋ถ€์˜€๋‹ค. ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ•ด์•ผํ•˜๋Š”์ง€๋Š” ๋ช…ํ™•ํ–ˆ์ง€๋งŒ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๊ณผ์ •์—์„œ ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค. Element, Node์— ๋Œ€ํ•œ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ DOM์— ๋Œ€ํ•ด ๋‹ค์‹œ ํ•™์Šตํ•˜๊ณ , Element์™€ Node์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. DOM์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•œ ๊ธ€์„ ์ฝ์œผ๋ฉฐ DOM์— ๋Œ€ํ•ด ํ•™์Šตํ•˜์˜€๋‹ค.

DOM

DOM์€ Document Object Model์˜ ์ค„์ž„๋ง๋ฉฐ, ์›นํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ํ•œ๋‹ค. DOM์ด ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฏ€๋กœ, ์šฐ๋ฆฌ๋Š” DOM์„ ํ†ตํ•ด ์›นํŽ˜์ด์ง€์˜ ์ปจํ…์ธ , ๊ตฌ์กฐ, ์Šคํƒ€์ผ์„ ์ฝ๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ„๏ธ Web page๋Š” ์–ด๋–ป๊ฒŒ ๋นŒ๋“œ๋˜๋Š”๊ฐ€?

๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ํŒŒ์ผ์„ ์ฝ์–ด์™€์„œ ํ™”๋ฉด์— ๋„์›Œ์ฃผ๋Š” ๊ณผ์ •์€ 'critical rendering path'๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. ์ด ๊ณผ์ •์„ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์ž๋ฉด, (1) ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ, ๊ฒฐ๊ตญ ํ™”๋ฉด์— ์–ด๋–ค ๊ฒƒ์ด ๋ณด์—ฌ์ง€๊ฒŒ ๋˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •๊ณผ (2) ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง์„ ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

(1)๋ฒˆ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด, ๋ Œ๋”ํŠธ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. ๋ Œ๋”ํŠธ๋ฆฌ๋Š” ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ฒŒ ๋˜๋Š” HTML element์™€ ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” ์Šคํƒ€์ผ์„ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ๋ Œ๋”ํŠธ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ์œ„ํ•ด์„œ๋Š” CSSOM(element์™€ ์—ฐ๊ด€๋œ ์Šคํƒ€์ผ์ด ํ‘œํ˜„๋œ Object Model)๊ณผ DOM(element๋ฅผ ํ‘œํ˜„ํ•˜๋Š” Object model)์ด ํ•„์š”ํ•˜๋‹ค.

โ„๏ธ DOM์€ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š”๊ฐ€?

DOM์€ HTML ๋ฌธ์„œ๋ฅผ ๊ฐ์ฒด ๊ธฐ๋ฐ˜์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ์™œ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ–ˆ์„๊นŒ? ์ด๋Š” HTML์˜ ๊ตฌ์กฐ์™€ ๋‚ด์šฉ์„ ๊ฐ์ฒด ๋ชจ๋ธ๋กœ ๋ฐ”๊ฟ”์„œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

DOM์˜ ๊ฐ์ฒด ๊ตฌ์กฐ๋Š” **'๋…ธ๋“œ ํŠธ๋ฆฌ'**๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, DOM์„ ๋ฃจํŠธ์—์„œ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋“ค์ด ๊ฐ€์ง€์น˜๋ฉฐ ๋‚˜์˜ค๋Š” ํŠธ๋ฆฌ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฃจํŠธ์˜ <html> element๋กœ ๋ถ€ํ„ฐ ์ค‘์ฒฉ๋œ ์—ฌ๋Ÿฌ element๊ฐ€ ๋ป—์–ด๋‚˜์˜ค๊ฒŒ ๋˜๋ฉฐ, ๋ง๋‹จ ๋…ธ๋“œ์—๋Š” ๊ฐ element์˜ content๊ฐ€ ์žˆ๋Š” ํ˜•ํƒœ์ด๋‹ค.

๋‹ค์Œ์˜ HTML ๋ฌธ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋…ธ๋“œ ํŠธ๋ฆฌ๋กœ ํ‘œํ˜„๋œ๋‹ค. html ํƒœ๊ทธ๋กœ๋ถ€ํ„ฐ, head, body node๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉฐ, ํŠธ๋ฆฌ์˜ leaf์—๋Š” ์ปจํ…์ธ ๋“ค์ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

<!DOCTYPE html>
<html>
 <head>
  <title>My title</title>
 </head>
 <body>
   <h1>My header</h1>
   <a href='#'>My Link</a>
 </body>
</html>

โ„๏ธ DOM์ด ์•„๋‹Œ ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?

DOM์ด HTML ๋ฌธ์„œ์™€ 1๋Œ€1๋กœ ๋งคํ•‘๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ฉฐ ๊ทธ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

DOM์€ ์›๋ณธ HTML์ด ์•„๋‹ˆ๋‹ค

DOM์ด HTML ๋ฌธ์„œ๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง€๊ธด ํ–ˆ์ง€๋งŒ, ํ•ญ์ƒ ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ™์ง€๋Š” ์•Š๋‹ค.

  • (์ฐจ์ด์  1) : HTML์ด ์œ ํšจํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

    DOM์€ ์˜ค๋กœ์ง€ ์œ ํšจํ•œ HTML ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. HTML์„ ํŒŒ์‹ฑํ•˜๋ฉฐ DOM์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ, ๋ธŒ๋ผ์šฐ์ €๋Š” HTML์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ๋“ค์„ ๊ณ ์น  ์ˆ˜๋„ ์žˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์˜ HTML๊ณผ ๊ฐ™์ด <head> ์™€ <body> ๊ฐ€ ๋น ์ง„ ์œ ํšจํ•˜์ง€ ์•Š์€ HTML์˜ ๊ฒฝ์šฐ, DOM์€ head์™€ body๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์œ ํšจํ•œ HTML๋กœ ๊ณ ์น˜๊ฒŒ ๋œ๋‹ค.

<!doctype html>
<html>
Hello, world!
</html>
  • (์ฐจ์ด์  2) : DOM์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์ˆ˜์ •๋˜์—ˆ์„ ๊ฒฝ์šฐ

    DOM์€ ์ •์ ์ธ ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค. JS๊ฐ€ DOM์— ์ˆ˜์ •์„ ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, DOM์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์ˆ˜์ •ํ•˜๋Š ๋“ฑ์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JS๊ฐ€ DOM์„ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•˜์—ฌ์„œ HTML์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

DOM์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ์€ ๋ Œ๋”ํŠธ๋ฆฌ์ด๋ฉฐ, ๋ Œ๋”ํŠธ๋ฆฌ๋Š” DOM๊ณผ CSSOM์„ ํ•ฉ์ณ์„œ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. DOM๊ณผ ๋ Œ๋”ํŠธ๋ฆฌ์˜ ์ฐจ์ด๋Š” ๋ Œ๋”ํŠธ๋ฆฌ๋Š” ํ™”๋ฉด์— ํŽ˜์ธํŠธ๋  ๊ฒƒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋ Œ๋”ํŠธ๋ฆฌ๋Š” ์˜ค๋กœ์ง€ ๋ฌด์—‡์ด ๋ Œ๋”๋ง๋ ์ง€์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์—ฌ์ง€์ง€ ์•Š๋Š” ๋ถ€๋ถ„์€ ๋ Œ๋”ํŠธ๋ฆฌ์—์„œ ์ œ์™ธ๊ฐ€ ๋œ๋‹ค. display: none ์†์„ฑ์ด ์žˆ๋Š” element๋Š” DOM์—๋Š” ์žˆ์ง€๋งŒ, ๋ณด์—ฌ์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ Œ๋”ํŠธ๋ฆฌ์—๋Š” ๋น ์ง„๋‹ค.

๋‹จ, visibility: hidden์€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ™”๋ฉด์— ๋ณด์ด์ง€๋Š” ์•Š์ง€๋งŒ, ๋ Œ๋”ํŠธ๋ฆฌ์—๋Š” ํฌํ•จ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, visibility: hidden์œผ๋กœ ์ˆจ๊ฒจ์ง„ element๋Š” ๋ณด์ด์ง€๋Š” ์•Š์ง€๋งŒ, ์‹ค์ œ ํ™”๋ฉด์—์„œ ๊ทธ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ ๋Š” ์žˆ๋‹ค.

DOM์ด devtool์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

devtool์€ DOM์— ๊ฐ€๊นŒ์šด ๊ฒƒ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋ฐ๋ธŒํˆด์€ DOM์— ์—†๋”๋ผ๋„, ์šฐ๋ฆฌ์—๊ฒŒ ์ •๋ณด๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€๋กœ ๋„ฃ๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

๊ทธ ์˜ˆ๋กœ๋Š” CSS์˜ pseudo element๊ฐ€ ์žˆ๋”ฐ. pseudo-element๋Š” CSSOM๊ณผ ๋ Œ๋”ํŠธ๋ฆฌ๋กœ๋ถ€ํ„ฐ ::before์™€ ::after ์…€๋ ‰ํ„ฐ๋กœ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, DOM์—๋Š” ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค. DOM์€ HTML๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ Element์™€ ๊ด€๋ จ๋œ ์Šคํƒ€์ผ์€ ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

pseudo-element๊ฐ€ DOM์˜ ๊ตฌ์„ฑ์€ ์•„๋‹ˆ์ง€๋งŒ, devtool์€ ๊ทธ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, pseudo-element๊ฐ€ devtool์—์„œ ๋ณด์—ฌ์ง„๋‹ค ํ•˜๋”๋ผ๋„, JS๋กœ ๊ทธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ targetํ•  ์ˆ˜๋Š” ์—†๋Š” ๊ฒƒ์ด๋‹ค.

DOM Node์™€ Element์˜ ์ฐจ์ด์ 

๐Ÿงฉ DOM Node

DOM์€ Node์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ๋…ธ๋“œ๋Š” ๋ถ€๋ชจ์™€ children์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

<!DOCTYPE html>
<html>
  <head>
    <title>My Page</title>
  </head>
  <body>
    <!-- Page Body -->
    <h2>My Page</h2>
    <p id="content">Thank you for visiting my web page!</p>
  </body>
</html>

์œ„์˜ HTMl์€ ์•„๋ž˜์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์˜ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

HTML์— ์žˆ๋Š” tag (<html>, <p>์™€ ๊ฐ™์€...)๋“ค์€ node๋ฅผ ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ทธ์ € text์ด๋”๋ผ๋„ node๊ฐ€ ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. ๋…ธ๋“œํŠธ๋ฆฌ๋ฅผ ๋ณด๋ฉด, <p> ์ž์‹ ๋…ธ๋“œ๋กœ text node๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Node Type

      Node.ELEMENT_NODE
      Node.ATTRIBUTE_NODE
      Node.TEXT_NODE
      Node.CDATA_SECTION_NODE
      Node.PROCESSING_INSTRUCTION_NODE
      Node.COMMENT_NODE
      Node.DOCUMENT_NODE
      Node.DOCUMENT_TYPE_NODE
      Node.DOCUMENT_FRAGMENT_NODE
      Node.NOTATION_NODE

    Node.ELEMENT_NODE ์™ธ์—๋„, ์ฃผ์„์˜ ํƒ€์ž…์ธ COMMENT_NODE์™€ ์ „์ฒด document tree๋ฅผ ํ‘œํ˜„ํ•˜๋Š” Node.DOCUMENT_NODE๋„ ์žˆ๋‹ค.

๐Ÿงฉ DOM Element

Element๋Š” node์˜ ํŠน์ • ํƒ€์ž… ์ฆ‰, Node.ELEMENT_NODE์ธ ๊ฒƒ์ด๋‹ค.

element๋Š” HTML์—์„œ ํƒœ๊ทธ๋กœ ์ ์€ ๋…ธ๋“œ๋“ค์„ ์ง€์นญํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, <html>, <div>, <title> ๊ณผ ๊ฐ™์€ ํƒœ๊ทธ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ๋“ค์€ ์ „๋ถ€ element์ธ ๊ฒƒ์ด๋‹ค. ์ฃผ์„์ด๋‚˜ text node์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์€ HTML ํƒœ๊ทธ๋กœ ํ‘œํ˜„๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ element๊ฐ€ ์•„๋‹ˆ๋‹ค.

JS DOM์—์„œNode๋Š” node์˜ constructor์ด๊ณ , HTMLElement๋Š” element์˜ constructor์ด๋‹ค.

paragraph๋Š” node์ด์ž ๋™์‹œ์— element์ด๋‹ค.

const paragraph = document.querySelector('p');

paragraph instanceof Node;        // => true
paragraph instanceof HTMLElement; // => true

๐Ÿงฉ DOM ํ”„๋กœํผํ‹ฐ

node์—๋งŒ ์žˆ๋Š” DOM ํ”„๋กœํผํ‹ฐ์™€ element์—๋งŒ ์žˆ๋Š” DOM ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ค„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

๋‹ค์Œ Node์˜ ํ”„๋กœํผํ‹ฐ๋“ค์€ node๋‚˜ NodeList๋ผ๊ณ  ํ•œ๋‹ค.

node.parentNode; // Node or null

node.firstChild; // Node or null
node.lastChild;  // Node or null

node.childNodes; // NodeList

๋‹ค์Œ Node์˜ ํ”„๋กœํผํ‹ฐ๋“ค์€ element๋‚˜ element์˜ ์ง‘ํ•ฉ(HTMLCollection)์ด๋‹ค.

node.parentElement; // HTMLElement or null

node.children;      // HTMLCollection

์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•  ๊ฒƒ์€ Node์˜ children์„ ๊ฐ€์ ธ์˜ค๋Š” ํ”„๋กœํผํ‹ฐ๋ผ๋Š” ์ ์—์„œ๋Š” ๊ฐ™์ง€๋งŒ, NodeList ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ค๋Š” node.childNodes์™€ HTMLCollection ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ค๋Š” node.children์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์™œ ์ด ๋‘ ๊ฐœ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, ๊ทธ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

<p>
  <b>Thank you</b> for visiting my web page!
</p>
const paragraph = document.querySelector('p');

paragraph.childNodes; // NodeList:       [HTMLElement, Text]
paragraph.children;   // HTMLCollection: [HTMLElement]

์œ„์— ์žˆ๋Š” p tag๋ฅผ childNodes์™€ children์œผ๋กœ ์ ‘๊ทผํ•˜์˜€์„ ๋•Œ, ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

childNodes๋กœ ์ ‘๊ทผํ•˜๋ฉด HTMLElement์™€ Text๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” p tag ์•ˆ์— ์ž์‹๋…ธ๋“œ๋กœ ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” element์ธ <b>Thank you</b>์™€ text node์ธ for visiting my web page!๊ฐ€ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

children์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด, ์˜ค๋กœ์ง€ HTMLCollection ์ฆ‰ element๋งŒ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ text node์ธ for visiting my web page!๋Š” ๋น ์ง€๊ณ , element node์ธ <b>Thank you</b>๋งŒ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

์ •๋ฆฌ

Element์™€ Node์˜ ์ฐจ์ด์ ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ , ์ ์ ˆํ•œ ๋•Œ์— ์ ์ ˆํ•œ ๊ฒƒ์— ์ ‘๊ทผํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ํ˜„์žฌ element์˜ parent๋กœ ๋„˜์–ด๊ฐ€์„œ sibling element์— ์ ‘๊ทผํ•ด์•ผ ํ–ˆ๋‹ค. ์ด ๋•Œ, parentNode๋กœ parent๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋‚ด๊ฐ€ ์˜๋„ํ•œ ๋ฐ”๋ฅผ ์ด๋ฃจ์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค. element๋กœ ๋„˜์–ด๊ฐ€๋ ค๋ฉด parentElement๋ฅผ ํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿฌ์ง€ ๋ชปํ•œ ๊ฒƒ์ด์—ˆ๋‹ค. ์ด์ œ Node์™€ Element์˜ ์ฐจ์ด์ ์„ ์•Œ์•˜์œผ๋‹ˆ, ํŒŒ์‹ฑํ• ๋•Œ๋‚˜ ๋ฐ”๋‹๋ผ๋กœ ํ”Œ์ ํ•  ์‹œ์— ์ข€ ๋” ์‚ฝ์งˆ์„ ๋œ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ๋Š”๋‹ค...

productExampleElement.parentElement.nextElementSibling;

์ฐธ๊ณ 

Last updated