[Javascript] DOM(Document Object Model)

task11ยท2022๋…„ 4์›” 20์ผ
0
post-thumbnail

๐Ÿ’ก ์ด ํฌ์ŠคํŒ…์€ DOM์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ํ˜น์—ฌ๋‚˜ ์ผ๋ถ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์‹œ์— ์ง€์ ํ•ด์ฃผ์‹œ๋ฉด ์ •์ •ํ† ๋กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐœ์š” ๐Ÿ›ซ

DOM์— ๋Œ€ํ•œ ์ดํ•ด์™€ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ , ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ ๊ฝƒ๐ŸŒป์ธ DOM์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

DOM์˜ ๊ตฌ์กฐ์™€ ์ ‘๊ทผ๋ฐฉ๋ฒ•(๋ฉ”์„œ๋“œ)์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ . DOM๊ณผ ๊ด€๋ จ๋œ ๊ฐ„๋‹จํ•œ ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ฌ๋ผ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ์ž‘ํ•ด๋ณด๊ณ ์žํ•œ๋‹ค.


Document Object Model ๐Ÿ“„

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ - ๋ชจ๋˜ javaScript ํŠœํ† ๋ฆฌ์–ผ

DOM ์ด๋ž€?

๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(The Document Object Model, ์ดํ•˜ DOM) ์€ HTML, XML ๋ฌธ์„œ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ interface ์ด๋‹ค. DOM์€ ๋ฌธ์„œ์˜ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„(structured representation)์„ ์ œ๊ณตํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์—ฌ ๊ทธ๋“ค์ด ๋ฌธ์„œ ๊ตฌ์กฐ, ์Šคํƒ€์ผ, ๋‚ด์šฉ ๋“ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š”๋‹ค. DOM ์€ nodes์™€ objects๋กœ ๋ฌธ์„œ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. - mdn web docs

์œ„ ์ •์˜์— ๋‚˜์™€์žˆ๋Š” DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜๊ณ  ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๋„๋ก ๋•๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” javaScript๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์ธ HTML ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Basic HTML</title>
</head>
<body>
  <div id="root">Helloo</div>
</body>
</html>

์œ„ HTML์˜ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด DOM์ด๋‹ค.

javascript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ„ HTML์˜ ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜์—ฌ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์Šคํƒ€์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

console.log, dir๋กœ ๊ฐ๊ฐ document.body๋ฅผ ์ฐ์–ด๋ณด๋ฉด

์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

  • console.log๋Š” ์š”์†Œ๋ฅผ HTML๊ณผ ๊ฐ™์€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ถœ๋ ฅ.
  • console.dir์€ ์š”์†Œ๋ฅผ JSON๊ณผ ๊ฐ™์€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ถœ๋ ฅ.

HTML๊ณผ javaScript๋ฅผ ๊ฐ€์ง€๊ณ  ์ฃผ์–ด์ง„ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด DOM์„ ์กฐ์ž‘ํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋ฅผ interactiveํ•˜๊ฒŒ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

DOM์„ ์กฐ์ž‘ํ•˜๋Š” ๊ณผ์ •์—์„œ DOM ๋ Œ๋”๋ง ์ˆœ์„œ์— ๋Œ€ํ•œ ์ดํ•ด๋„๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ๋ถ„๋ช…ํžˆ ๋งŽ์€ ์˜ค๋ฅ˜๋ฅผ ๋งž๋”ฑ ๋œจ๋ฆฌ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ํ•„์ž๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ธ ์ƒํ™ฉ


DOM Access ๐Ÿ—‚

DOM์œผ๋กœ์˜ ๋‹ค์–‘ํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๋Š”๋‹ค.

Document

์ง€๊ธˆ ์ž‘๋™ํ•˜๊ณ ์žˆ๋Š” ์›น ํŽ˜์ด์ง€๋Š” document๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

HTML === document

๊ทธ๋Ÿฌ๋‹ˆ, document๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋Š” ์•ž์œผ๋กœ DOM์„ ์กฐ์ž‘ํ•  ๋•Œ ๋ฌด์กฐ๊ฑด ์“ฐ์ผ ๊ฒƒ์ด๋‹ค.

DOM Tree์˜ ์ƒ๋‹จ ๋…ธ๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. (๋‹น์—ฐํžˆ ์ƒ๋‹จ ๋…ธ๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•˜์œ„ ๋…ธ๋“œ๊นŒ์ง€ ๋‹ค ๊ฐ€์ ธ์˜จ๋‹ค.)

  • <html>: document.documentElement

  • <body>: document.body

  • <head>: document.head

childNodes / firstChild / lastChild

child๋Š” ์ž์‹์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๊ณ ๋กœ ๋‚ด๊ฐ€ ์„ ํƒํ•œ Node์˜ ์ž์‹ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

  • childNodes: ๋‚ด๊ฐ€ ์„ ํƒํ•œ ๋…ธ๋“œ ๋’ค์— *.childNodes ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฐฐ์—ด์ด ์•„๋‹Œ ์ดํ„ฐ๋Ÿฌ๋ธ”ํ•œ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ธ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.)
  • firstChild: ๋‚ด๊ฐ€ ์„ ํƒํ•œ ๋…ธ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  • lastChild: ๋‚ด๊ฐ€ ์„ ํƒํ•œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

nextSibling / previousSibling

sibling์€ ํ˜•์ œ/์ž๋งค๋ผ๋Š” ๋œป์ด๋‹ค. ๊ฐ™์€ indentation์„ ๊ฐ–๋Š” ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. (์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ ๋“ฑ์— ์ž์ฃผ ์“ฐ์ž„.)

  • nextSibling: ๋‹ค์Œ ํ˜•์ œ์ธ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.(์•„๋ž˜์ชฝ ๋…ธ๋“œ)
  • previousSibling: ์ด์ „ ํ˜•์ œ์ธ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.(์œ„์ชฝ ๋…ธ๋“œ)

parentNode

parent๋Š” ๋ถ€๋ชจ๋‹ค. ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

  • parentNode : ๋‚ด๊ฐ€ ์„ ํƒํ•œ ๋…ธ๋“œ์˜ ์ง๊ณ„ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

getElement / querySelector

์œ„์— ์ž์‹ ํ˜•์ œ ๋ถ€๋ชจ ์ฒ˜๋Ÿผ ๊ทผ์ฒ˜์—๋งŒ ์žˆ๋Š” ๋…ธ๋“œ๋งŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๋ฉด, DOM ์กฐ์ž‘์ด ๊ต‰์žฅํžˆ ๋ถˆํŽธํ•˜๊ณ  ๊นŒ๋‹ค๋กœ์› ์„ ๊ฒƒ์ด๋‹ค.

DOM ์กฐ์ž‘์˜ ๊ฝƒ์ด๋‹ค.

Tag, Id, ํ•˜๋‚˜๋งŒ ์ฐพ๊ธฐ ์ „๋ถ€ ์ฐพ๊ธฐ ๋“ฑ๋“ฑ ๋งŽ์ด ์žˆ์ง€๋งŒ. ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์ •๋ฆฌํ•˜๊ฒ ๋‹ค.

  • getElementById: ํ•ด๋‹น ์•„์ด๋””๋กœ ์ง€์ •ํ•œ tag๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  • querySelector: CSS Selector๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ์„ ํƒ๋œ tag๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. (๊ฐ€์žฅ ๋งŽ์ด์“ฐ์ด๋Š” ๋“ฏ ํ•˜๋‹ค.)
  • querySelectorAll: CSS Selector๋กœ ์„ ํƒ๋œ ๋ชจ๋“  tag๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค.

nodeType / nodeName

node์˜ Type์ด๋‚˜ Name์œผ๋กœ ๊ฐ€์ ธ์˜จ Node์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

  • nodeType: ์š”์†Œ๋…ธ๋“œ, ์ฃผ์„๋…ธ๋“œ ๋“ฑ๋“ฑ ๋…ธ๋“œ์˜ ํƒ€์ž…์„ ์•Œ๋ ค์ค€๋‹ค.
  • nodeName: ๋…ธ๋“œ์˜ ์ด๋ฆ„์„ ์•Œ๋ ค์ค€๋‹ค. ex) DIV, UL ..

innerHTML / outerHTML

node์˜ HTML์š”์†Œ๋ฅผ ์ฝ์–ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

<span class="text">Hi..</span>

์œ„ ์˜ˆ์ œ๋ฅผ ๊ฐ€์ ธ์™€ ์•„๋ž˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด,

  • innerHTML: Hi.. (์•ˆ์ชฝ HTML์„ ์ถœ๋ ฅํ•œ๋‹ค.)
  • outerHTML: <span class="text">Hi..</span> (๋ฐ”๊นฅ์ชฝ HTML๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.)

createElement / createTextNode

์š”์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฉ”์„œ๋“œ

  • createElement: div, ul ๋“ฑ๋“ฑ ํ•„์š”ํ•œ ํƒœ๊ทธ๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • createTextNode: text node๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

Project ๋‚ด์šฉ

DOM์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ์ž‘ํ•  ๊ฒƒ์ด๋‹ค.

DOM์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋“ค์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. (๋ชจ๋ฅด๋ฉด ์•ˆ์“ฐ๊ฒŒ ๋˜๋”๋ผ..)

ํ•ญ์ƒ ๊ณต๋ถ€ํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•˜๊ณ  ๊ธฐ๋กํ•ด ๋‘๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ๊ณผ๊ฑฐ์— ๊ทธ๋ ‡๊ฒŒ ๊ณต๋ถ€ํ–ˆ๋˜ ๊ฒƒ๋“ค์ด ์‚ฌ์‹ค ๋จธ๋ฆฌ ์†์— ์ •ํ™•ํžˆ ๋ฐ•ํžˆ์ง€๋Š” ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ž˜์„œ, ๊ณต๋ถ€ํ•œ ๊ฒƒ๋“ค ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ธฐ๋กํ•ด ๋‘๋ ค๊ณ  ํ•œ๋‹ค.

์ด๋ฒˆ์— ๋งŒ๋“ค ์„œ๋น„์Šค๋Š” DOM Tree maker๋ผ๋Š” ์ด๋ฆ„๋งŒ ๊ฑฐ์ฐฝํ•œ ๋ณ„๋กœ ์“ธ๋ชจ์—†๋Š” ํ”„๋กœ์ ํŠธ์ด๋‹ค.

๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • HTML ์ฝ”๋“œ๋ฅผ Input Box์— ๋„ฃ๋Š”๋‹ค.
  • ์„ธ ๊ฐ€์ง€ ๋ฒ„ํŠผ ์ค‘ ํ•˜๋‚˜๋ฅผ ํด๋ฆญํ•˜์—ฌ Output Box์— ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • Print Tree ๋ฒ„ํŠผ: HTML์ฝ”๋“œ์˜ DOM Tree๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.(Body ๋‚ด๋ถ€์˜ ๋ชจ๋“  Node๋“ค์ด indentation์„ ๊ฐ–๊ฒŒ ์ถœ๋ ฅ)
    • querySelector ๋ฒ„ํŠผ: CSS Selector๋ฅผ ๋„ฃ์œผ๋ฉด ์ž…๋ ฅ๋œ HTML ์ฝ”๋“œ์—์„œ ๋…ธ๋“œ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.
    • getElementById ๋ฒ„ํŠผ: id๋ฅผ ๋„ฃ์œผ๋ฉด ์ž…๋ ฅ๋œ HTML ์ฝ”๋“œ์—์„œ ๋…ธ๋“œ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.
  • ๋„์œผ์.

DOM Tree maker Project ๐ŸŒฒ

์‹œํ–‰์ฐฉ์˜ค

String to HTML

์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ๋ฐ›๋Š” ๋ฌธ์ž์—ด(String)์„ HTML ํŒŒ์‹ฑํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ฌธ์ œ์˜€๋‹ค.

DOMParser ๋ผ๋Š” Web API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ string์„ HTML๋กœ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.(json->obj ๋ณ€ํ™˜ํ•˜๋Š”๊ฑฐ๋ž‘ ๋น„์Šทํ•˜๋‹ค.)

const transformStrToHTML = (str) => {
  const parser = new DOMParser();
  const doc = parser.parseFromString(str, 'text/html');
  return doc;
};

DOM Tree ๊ทธ๋ฆฌ๊ธฐ(๋…ธ๋“œ ์•„๋ž˜ ๋…ธ๋“œ ์•„๋ž˜ ๋…ธ๋“œ ์•„๋ž˜ ....)

DOM Tree๋ฅผ ๊ทธ๋ฆด๋•Œ 1์–ต๊ฐœ์˜ ์ž์†์„ ๊ฐ™๋Š” ๋…ธ๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ชจ๋‘ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋กœ์ง์„ ์งœ์•ผํ–ˆ๋‹ค.

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋‚ด๊ฐ€ Tree๋ฅผ ๊ตฌ์กฐํ™”ํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • body ์ดํ›„ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋œ๋‹ค.
  • ol, li element๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ๋…ธ๋“œ์˜ ์ด๋ฆ„์œผ๋กœ text node๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ol>li>textNode ์ˆœ์„œ๋กœ ์กฐ๋ฆฝํ•œ๋‹ค.
  • ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด(hasChildNodes() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ) ์žฌ๊ท€
// searchNode function
const searchNode = (nodes) => {
  const ol = document.createElement("ol");

  for (let i = 0; i < nodes.length; i++) {
    const li = document.createElement("li");
    const text = document.createTextNode(
      "NODE NAME: " + nodes[i].nodeName
    );
    li.appendChild(text);
    ol.appendChild(li);

    if (nodes[i].hasChildNodes()) {
      ol.append(searchNode(nodes[i].childNodes));
    }
  }

  return ol;
};

HTML ๋ฌธ์ž์—ด๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ

querySelector๋‚˜ getElementById๋กœ ๊ฐ€์ ธ์˜ฌ ๋•Œ

innerHTML์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ทธ๋ƒฅ Object๋ฅผ Output์— ๋ฟŒ๋ ค์ฃผ๋ฉด ๊ฐ’์ด ์ œ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š์•˜๋‹ค.

outerHTML์„ ์‚ฌ์šฉํ•ด์„œ ์„ ํƒ๋œ ์š”์†Œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅํ•ด์ฃผ์—ˆ๋‹ค.

const printQuerySelector = (str) => {
  if (str === "") {
    alert("HTML์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”~");
    return;
  }
  const doc = transformStrToHTML(str);
  const inputQuery = document.querySelector(".selector");
  const $result = document.querySelector(".result");

  resetResult($result);

  if (!inputQuery.value) {
    alert("CSS Selector๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
    return;
  }
  const text = document.createTextNode(doc.querySelector(inputQuery.value).outerHTML);

  $result.appendChild(text);
};

๊ฒฐ๊ณผ

์œ„ ํ•™์Šตํ•œ ์ •๋ณด๋“ค๋กœ ๋งŒ๋“ค์–ด๋‚ธ DOM tree maker project

์œ„ ๋‚ด์šฉ๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ์™„์„ฑ๋œ ํ”„๋กœ์ ํŠธ์ด๋‹ค. (Project ๋ฌธ์„œ์— ์›น ์„œ๋น„์Šค ๋งํฌ๊ฐ€ ์žˆ๋‹ค.)

๋งŽ์€ ์งˆํƒ€์™€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ ์‹ถ๋‹ค..

github link: DOM Tree Maker

์‹คํ–‰


References ๐Ÿ™๐Ÿฝ

0๊ฐœ์˜ ๋Œ“๊ธ€