๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฐ ์–ธ์–ด/JS

๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(2) - DOM ์š”์†Œ ์ ‘๊ทผ, ์กฐ์ž‘

์ฑ… <๋Ÿฌ๋‹์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ>๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๋ฐฐ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • <DOM ์š”์†Œ ์ ‘๊ทผ, ํƒ์ƒ‰, ์กฐ์ž‘>
  • 1. DOM ์š”์†Œ์— ์ ‘๊ทผ
  • 1-1) get๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉ
    1-2) DOM์š”์†Œ ์ฟผ๋ฆฌ
    1-3) DOM Traversing(ํƒ์ƒ‰)
  • 2. DOM ์š”์†Œ ์กฐ์ž‘
  • 2-1) ํ…์ŠคํŠธ ๋…ธ๋“œ์—์˜ ์ ‘๊ทผ/์ˆ˜์ •
    2-2) ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ์—์˜ ์ ‘๊ทผ/์ˆ˜์ •
    2-3) HTML ์ฝ˜ํ…์ธ  ์กฐ์ž‘(Manipulation)
    2-4) DOM์„ ์ง์ ‘ ์กฐ์ž‘
    โ€ป innerHTML vs. DOM ์กฐ์ž‘ ๋ฐฉ์‹

 

<DOM ์š”์†Œ ์ ‘๊ทผ, ์กฐ์ž‘>

DOM์„ ํ†ตํ•ด ์›นํŽ˜์ด์ง€๋ฅผ ์กฐ์ž‘(manipulate)ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ์ƒ‰๊ณผ ์กฐ์ž‘ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ด๊ฒƒ์— ํ•„์š”ํ•œ ์ˆ˜๋‹จ(API)์„ ์ œ๊ณตํ•œ๋‹ค.

  • ์กฐ์ž‘ํ•˜๊ณ ์žํ•˜๋Š” ์š”์†Œ๋ฅผ ์„ ํƒ ๋˜๋Š” ํƒ์ƒ‰
  • ์„ ํƒ๋œ ์š”์†Œ์˜ ์ฝ˜ํ…์ธ  ๋˜๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์กฐ์ž‘

 

1. DOM ์š”์†Œ์— ์ ‘๊ทผ

DOM์š”์†Œ๋ฅผ ํƒ์ƒ‰์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ• ์„ธ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

1-1) get๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉ

document.getElementById()

ID๋ฅผ ์ด์šฉํ•ด ์š”์†Œ๋ฅผ ํƒ์ƒ‰

document.getElementsByClassName()

์ฃผ์–ด์ง„ ํด๋ž˜์Šค ์ด๋ฆ„์— ํ•ด๋‹น๋˜๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜

document.getElementsByTagName()

์ฃผ์–ด์ง„ ํƒœ๊ทธ ์ด๋ฆ„์— ํ•ด๋‹น๋˜๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜

 

1-2)  DOM์š”์†Œ ์ฟผ๋ฆฌ

document.querySelector()

CSS์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์š”์†Œ๋ฅผ ์ฐพ์Œ.

์„ ํƒ์ž์— ํ•ด๋‹นํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋งŒ ํƒ์ƒ‰ํ•จ.

document.querySelectorAll()

CSS์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์š”์†Œ๋ฅผ ์ฐพ์Œ.

์„ ํƒ์ž์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ๊ฐ€์ ธ์˜ด.

 

1-3) DOM Traversing(ํƒ์ƒ‰)

์ž์‹ ๋…ธ๋“œ ํƒ์ƒ‰

hasChildNodes()

์ž์‹ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  Boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Children

์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์™€ ์œ ์‚ฌ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜.
โ€ปelement.querySelectorAll()๊ณผ ๋‹ค๋ฅธ ์ ์€ children์œผ๋กœ ๊ฐ€์ ธ ์˜จ HTMLCollection์€ live๋ผ์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค.

firstElementChild, 

lastElementChild

์ฒซ๋ฒˆ์จฐ/ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰.

childNodes

์ž์‹ ๋…ธ๋“œ์˜ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜.

ํ•ด๋‹น ์š”์†Œ ํ•˜์œ„์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  text node์™€ comment node๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐ˜ํ™˜. ํƒœ๊ทธ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์ด๋‚˜ ๋„์–ด์“ฐ๊ธฐ๋„ text node๋กœ ์ธ์ง€ํ•˜์—ฌ ๋ฐ˜ํ™˜.

ํ˜•์ œ ๋…ธ๋“œ ํƒ์ƒ‰

previousSibling, 

nextSibling 

ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰.

text node๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

previousElementSibling, 

nextElementSibling 

ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰.

ํ˜•์ œ ๋…ธ๋“œ ์ค‘์—์„œ Element type ์š”์†Œ๋งŒ์„ ํƒ์ƒ‰ํ•œ๋‹ค.

๋ถ€๋ชจ ๋…ธ๋“œ ํƒ์ƒ‰

parentNode

ํ•ด๋‹น ์š”์†Œ์˜ ๋ถ€๋ชจ ์š”์†Œ์— ์ ‘๊ทผ. 

parentNode๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์œ„๋กœ ๊ณ„์† ๊ฑฐ์Šฌ๋Ÿฌ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ document node๊นŒ์ง€ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ€๊ณ  ๊ทธ ์ด์ƒ์€ null๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค. 

parentElement

ํ•ด๋‹น ์š”์†Œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰. 

parentNode์™€ ๋˜‘๊ฐ™์€ ์—ญํ• ์„ ํ•˜์ง€๋งŒ element ์š”์†Œ๋งŒ ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ ๊นŒ์ง€ ๊ฑฐ์Šฌ๋Ÿฌ์˜ฌ๋ผ๊ฐ„ ์ดํ›„์— ๊ทธ ์ƒ์œ„ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด null๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

2. DOM ์š”์†Œ ์กฐ์ž‘

  • ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ ๋˜๋Š” ๋ณ€๊ฒฝ์‹œ์—๋Š” textContent, ์ƒˆ๋กœ์šด ์š”์†Œ์˜ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ์‹œ์—๋Š” DOM ์กฐ์ž‘ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.
  • innerHTML์€ ํฌ๋กœ์Šค ์Šคํฌ๋ฆฝํŒ… ๊ณต๊ฒฉ(XSS)์— ์ทจ์•ฝํ•˜๋‹ค. ๋”ฐ๋ผ์„œ untrusted data์˜ ๊ฒฝ์šฐ, ์ฃผ์˜ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

2-1) ํ…์ŠคํŠธ ๋…ธ๋“œ์—์˜ ์ ‘๊ทผ/์ˆ˜์ •- ๋ชจ๋“  ์š”์†Œ์— ์กด์žฌํ•˜๋Š” nodeName, nodeType์„ ํ†ตํ•ด ๋…ธ๋“œ์˜ ์ •๋ณด๋ฅผ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ํ•ด๋‹น ํ…์ŠคํŠธ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค. ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹์ด๋‹ค.
  2. firstChild ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
  3. ํ…์ŠคํŠธ ๋…ธ๋“œ์˜ ์œ ์ผํ•œ ํ”„๋กœํผํ‹ฐ(nodeValue)๋ฅผ ์ด์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ์ทจ๋“ํ•œ๋‹ค.
  4. nodeValue๋ฅผ ์ด์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

 

2-2) ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ์—์˜ ์ ‘๊ทผ/์ˆ˜์ •

className

class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์„ ์ทจ๋“ ๋˜๋Š” ๋ณ€๊ฒฝ.

className ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ, class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ง€์ •๋œ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค. class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ, ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด์ด ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ String ๋ฉ”์†Œ๋“œ split(' ')๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

classList add, remove, item, toggle, contains, replace ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณต.
id

id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์„ ์ทจ๋“ ๋˜๋Š” ๋ณ€๊ฒฝ.

id ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ, id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ง€์ •๋œ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค. 

hasAttribute(attribute) ์ง€์ •ํ•œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ.
getAttribute(attribute) ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’ ์ทจ๋“.
setAttribute(attribute, value) ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ ์„ค์ •.
removeAttribute(attribute) ์ง€์ •ํ•œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ œ๊ฑฐ.

 

2-3) HTML ์ฝ˜ํ…์ธ  ์กฐ์ž‘(Manipulation) - ๋ชจ๋“  ์š”์†Œ์— ์กด์žฌํ•˜๋Š” textContent, innerHTML์„ ํ†ตํ•ด ์ฝ˜๋ด์ธ ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‘ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ํŒŒ๊ดด์ ์ธ ์ž‘์—…์ด๋ฏ€๋กœ ์ฃผ์˜ํ•œ๋‹ค.

textContent

์š”์†Œ์˜ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ  ์ทจ๋“ ๋˜๋Š” ๋ณ€๊ฒฝ. ์ด๋•Œ ๋งˆํฌ์—…์€ ๋ฌด์‹œ๋จ. ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ๋ฅผ ํ• ๋‹นํ•˜๋ฉด ํ…์ŠคํŠธ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ.

์ด๋•Œ ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋งŒ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ ๋งˆํฌ์—…์„ ํฌํ•จ์‹œํ‚ค๋ฉด ๋ฌธ์ž์—ด๋กœ ์ธ์‹๋˜์–ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค. (XSS์— ์ทจ์•ฝํ•˜๋‹ค.)

innerText

์š”์†Œ์˜ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ์—๋งŒ ์ ‘๊ทผ. 

innerText์˜ ๋‹จ์  : 
๋น„ํ‘œ์ค€์ด๋‹ค. 
CSS์— ์ˆœ์ข…์ ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CSS์— ์˜ํ•ด (visibility: hidden;)๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ํ…์ŠคํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค. 
CSS๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฏ€๋กœ textContent ํ”„๋กœํผํ‹ฐ๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค

innerHTML

ํ•ด๋‹น ์š”์†Œ์˜ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ์ฝ˜ํ…์ธ ๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ทจ๋“. ์ด ๋ฌธ์ž์—ด์€ ๋งˆํฌ์—…์„ ํฌํ•จํ•จ.

 

2-4) DOM์„ ์ง์ ‘ ์กฐ์ž‘ - ํ•œ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ

  1. ์š”์†Œ ๋…ธ๋“œ ์ƒ์„ฑ createElement() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. createElement() ๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๋กœ ํƒœ๊ทธ ์ด๋ฆ„์„ ์ „๋‹ฌํ•œ๋‹ค.
  2. ํ…์ŠคํŠธ ๋…ธ๋“œ ์ƒ์„ฑ createTextNode() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ƒ๋žต๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ, ์ฝ˜ํ…์ธ ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ์š”์†Œ๊ฐ€ ๋œ๋‹ค.
  3. ์ƒ์„ฑ๋œ ์š”์†Œ๋ฅผ DOM์— ์ถ”๊ฐ€ appendChild() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋…ธ๋“œ๋ฅผ DOM tree์— ์ถ”๊ฐ€ํ•œ๋‹ค. ๋˜๋Š” removeChild() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM tree์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
createElement(tagName) ํƒœ๊ทธ์ด๋ฆ„์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
createTextNode(text) ํ…์ŠคํŠธ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
appendChild(Node) ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ๋…ธ๋“œ๋ฅผ ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ๋กœ DOM ํŠธ๋ฆฌ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
removeChild(Node) ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ๋…ธ๋“œ๋ฅผ DOM ํŠธ๋ฆฌ์— ์ œ๊ฑฐํ•œ๋‹ค.

 

โ€ป innerHTML vs. DOM ์กฐ์ž‘ ๋ฐฉ์‹

  • innerHTML
์žฅ์  ๋‹จ์ 
DOM ์กฐ์ž‘ ๋ฐฉ์‹์— ๋น„ํ•ด ๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๋‹ค. XSS๊ณต๊ฒฉ์— ์ทจ์•ฝ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋กœ ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ์ฝ˜ํ…์ธ (untrusted data: ๋Œ“๊ธ€, ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋“ฑ)๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ฃผ์˜ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฌธ์ž์—ด๋กœ ์ •์˜ํ•œ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ DOM์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ์š”์†Œ์˜ ๋‚ด์šฉ์„ ๋ฎ์–ด ์“ด๋‹ค. ์ฆ‰, HTML์„ ๋‹ค์‹œ ํŒŒ์‹ฑํ•œ๋‹ค. ์ด๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.
์ฝ˜ํ…์ธ ๋ฅผ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.  
  • DOM ์กฐ์ž‘ ๋ฐฉ์‹
์žฅ์  ๋‹จ์ 
ํŠน์ • ๋…ธ๋“œ ํ•œ ๊ฐœ(๋…ธ๋“œ, ํ…์ŠคํŠธ, ๋ฐ์ดํ„ฐ ๋“ฑ)๋ฅผ DOM์— ์ถ”๊ฐ€ํ•  ๋•Œ ์ ํ•ฉํ•˜๋‹ค. innerHTML๋ณด๋‹ค ๋Š๋ฆฌ๊ณ  ๋” ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.