/
๐Ÿ—ƒ

DOM(Document Object Model)

DOMWeb
Table of contents

๊ฐ์ฒด๋กœ ๋ฌธ์„œ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ XML์ด๋‚˜ HTML๋กœ ์ž‘์„ฑํ•œ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ์›น ๋ฌธ์„œ๋ฅผ ๋กœ๋“œํ•œ ํ›„, ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•œ๋‹ค.

ํŠธ๋ฆฌ ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ˆ˜์ •, ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ์œ„์น˜์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” DOM์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ์ฒด์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ CSS๋ฅผ ์ ์šฉํ•œ๋‹ค.

HTML ์ž์ฒด์ ์œผ๋กœ๋Š” ์ •์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์  UI์— ์ตœ์ ํ™”๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

DOM์ด ๋‹ด๋‹นํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ

  • HTML ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ชจ๋ธ ๊ตฌ์„ฑ : ๋ธŒ๋ผ์šฐ์ €๋Š” HTML๋ฌธ์„œ๋ฅผ ๋กœ๋“œํ•œ ํ›„ ํ•ด๋‹น ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ชจ๋ธ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ ๋ชจ๋ธ์€ ๊ฐ์ฒด์˜ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ ์ด๊ฒƒ์„ DOM tree๋ผ ํ•œ๋‹ค.

  • HTML ๋ฌธ์„œ ๋‚ด์˜ ๊ฐ ์š”์†Œ์— ์ ‘๊ทผ / ์ˆ˜์ • : DOM์€ ๋ชจ๋ธ ๋‚ด์˜ ๊ฐ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. DOM์ด ์ˆ˜์ •๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ฒŒ ๋  ๋‚ด์šฉ ๋˜ํ•œ ๋ณ€๊ฒฝ๋œ๋‹ค.

DOM tree

DOM tree๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ๋ฌธ์„œ๋ฅผ ๋กœ๋“œํ•œ ํ›„ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋ธ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ ๊ฐ์ฒด์˜ ํŠธ๋ฆฌ๋กœ ๊ตฌ์กฐํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— DOM tree๋ผ ๋ถ€๋ฅธ๋‹ค.

DOM tree์˜ ๋…ธ๋“œ ๊ตฌ์„ฑ

  • ๋ฌธ์„œ ๋…ธ๋“œ(Document Node) ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„์— ์กด์žฌํ•˜๋ฉฐ ๊ฐ๊ฐ ์š”์†Œ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ, ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ฌธ์„œ ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰ DOM tree์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์ž‘์ (entry point)์ด๋‹ค.

  • ์š”์†Œ ๋…ธ๋“œ(Element Node) ์š”์†Œ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. HTML ์š”์†Œ๋Š” ์ค‘์ฒฉ์— ์˜ํ•ด ๋ถ€์ž ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ด ๋ถ€์ž ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๊ตฌ์กฐํ™”ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์†Œ ๋…ธ๋“œ๋Š” ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ์„œ์ˆ ํ•œ๋‹ค๊ณ  ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ดํŠธ๋ฆฌ๋ทฐํŠธ, ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋จผ์ € ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค. ๋ชจ๋“  ์š”์†Œ ๋…ธ๋“œ๋Š” ์š”์†Œ๋ณ„ ํŠน์„ฑ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด HTMLElement ๊ฐ์ฒด๋ฅผ ์ƒ์†ํ•œ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ(Attribute Node) ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๋Š” ํ•ด๋‹น ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์ง€์ •๋œ ์š”์†Œ์˜ ์ž์‹์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์š”์†Œ์˜ ์ผ๋ถ€๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ ‘๊ทผํ•˜๋ฉด ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ฐธ์กฐ, ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ…์ŠคํŠธ ๋…ธ๋“œ(Text Node) ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ์˜ ํ…์ŠคํŠธ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹์ด๋ฉฐ ์ž์‹ ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. ์ฆ‰ ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” DOM tree์˜ ์ตœ์ข…๋‹จ์ด๋‹ค.

DOM Query / Traversing (์š”์†Œ์—์˜ ์ ‘๊ทผ)

ํ•˜๋‚˜์˜ ์š”์†Œ ๋…ธ๋“œ ์„ ํƒ(DOM Query)

  • document.getElementById(id)

    • id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์œผ๋กœ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ํ•œ๊ฐœ ์„ ํƒํ•œ๋‹ค. ๋ณต์ˆ˜๊ฐœ๊ฐ€ ์„ ํƒ๋œ ๊ฒฝ์šฐ, ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด
    • ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘
  • document.querySelector(cssSelector)

    • CSS ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ํ•œ๊ฐœ ์„ ํƒํ•œ๋‹ค. ๋ณต์ˆ˜๊ฐœ๊ฐ€ ์„ ํƒ๋œ ๊ฒฝ์šฐ, ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด
    • IE8 ์ด์ƒ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘

์—ฌ๋Ÿฌ๊ฐœ์˜ ์š”์†Œ ๋…ธ๋“œ ์„ ํƒ(DOM Query)

  • document.getElementsByClassName(class)
    • class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์œผ๋กœ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ๋‹ค. ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐœ์˜ class๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Return: HTMLCollection (live)
    • IE9 ์ด์ƒ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ getElementsByClassName ๋ฉ”์†Œ๋“œ์˜ ๋ฐ˜ํ™˜๊ฐ’์€ HTMLCollection์ด๋‹ค. ์ด๊ฒƒ์€ ๋ฐ˜ํ™˜๊ฐ’์ด ๋ณต์ˆ˜์ธ ๊ฒฝ์šฐ, HTMLElement์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด๋กœ ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•œ ์‚ฌ์šฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ฐฐ์—ด์€ ์•„๋‹Œ ์œ ์‚ฌ๋ฐฐ์—ด(array-like object)์ด๋‹ค. ๋˜ํ•œ HTMLCollection์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ Node์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•œ๋‹ค. (live HTMLCollection)

HTMLCollection๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ Node์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— loop๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฅผ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ˜๋ณต๋ฌธ์„ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฐ๋‹ค.

  • while ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ elems์— ์š”์†Œ๊ฐ€ ๋‚จ์•„ ์žˆ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด index๋Š” 0์œผ๋กœ ๊ณ ์ •์‹œํ‚จ๋‹ค.

  • HTMLCollection์„ ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

  • querySelectorAll ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTMLCollection(live)์ด ์•„๋‹Œ NodeList(non-live)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•œ๋‹ค.

  • document.getElementsByTagName(tagName)

    • ํƒœ๊ทธ๋ช…์œผ๋กœ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ๋‹ค.
    • Return: HTMLCollection (live)
    • ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘
  • document.querySelectorAll(selector)

    • ์ง€์ •๋œ CSS ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ๋‹ค.
    • Return: NodeList (non-live)
    • IE8 ์ด์ƒ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘

DOM Traversing (ํƒ์ƒ‰)

  • parentNode
    • ๋ถ€๋ชจ ๋…ธ๋“œ ํƒ์ƒ‰
    • HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด ๋ฐ˜ํ™˜
  • firstChild, lastChild, firstElementChild, lastElementChild
    • ์ž์‹ ๋…ธํŠธ ํƒ์ƒ‰
    • HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด ๋ฐ˜ํ™˜
  • hasChildNodes()
    • ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    • Boolean ๋ฐ˜ํ™˜
  • childNodes
    • ํ…์ŠคํŠธ ์š”์†Œ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜
    • NodeList(non-live) ๋ฐ˜ํ™˜
  • children
    • ์ž์‹ ์š”์†Œ ์ค‘ Element type ์š”์†Œ๋งŒ์„ ๋ฐ˜ํ™˜
    • HTMLCollection(live) ๋ฐ˜ํ™˜
  • previousSibling, nextSibling
    • text node๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ํ˜•์ œ ๋…ธ๋“œ ํƒ์ƒ‰
    • HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด ๋ฐ˜ํ™˜
  • previousElementSibling, nextElementSibling
    • ํ˜•์ œ ๋…ธ๋“œ ์ค‘ Element type ์š”์†Œ๋งŒ์„ ํƒ์ƒ‰
    • HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด ๋ฐ˜ํ™˜

DOM Manipulation (์กฐ์ž‘)

์–ดํŠธ๋ฆฌ๋ทฐํŠธ vs ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ ํ”„๋กœํผํ‹ฐ๋Š” ๋‹ค๋ฅด๋‹ค ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ํ”„๋กœํผํ‹ฐ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ id๋Š” idํ”„๋กœํผํ‹ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฐ˜์— class๋Š”

ํ…์ŠคํŠธ ๋…ธ๋“œ ์ ‘๊ทผ/์ˆ˜์ •

  • nodeValue
    • ํ…์ŠคํŠธ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ๋Š” ๋ฌธ์ž์—ด, ์š”์†Œ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ null ๋ฐ˜ํ™˜
  • nodeName
  • nodeType

์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ ์ ‘๊ทผ/์ˆ˜์ •

  • className

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

    • add, remove, item, toggle, contains, replace ๋ฉ”์†Œ๋“œ ์ œ๊ณต
  • id

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

    • ์ง€์ •ํ•œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ
    • Boolean ๋ฐ˜ํ™˜
  • getAttribute(attribute)

    • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์„ ์ทจ๋“
    • String ๋ฐ˜ํ™˜
  • setAttribute(attribute, value)

    • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’ ์„ค์ •
    • undefined ๋ฐ˜ํ™˜
  • removeAttribute(attribute)

    • ์ง€์ •ํ•œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ œ๊ฑฐ
    • undefined ๋ฐ˜ํ™˜

HTML ์ฝ˜ํ…์ธ  ์กฐ์ž‘(Manipulation)

  • textContent

    • ์š”์†Œ์˜ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ๋ฅผ ์ทจ๋“ ๋˜๋Š” ๋ณ€๊ฒฝ(๋งˆํฌ์—… ๋ฌด์‹œ)
    • ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ๋ฅผ ํ• ๋‹นํ•˜๋ฉด ํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝ
      • ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋งŒ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.
      • ๋งˆํฌ์—…์„ ํฌํ•จ์‹œํ‚ค๋ฉด ๋ฌธ์ž์—ด๋กœ ์ธ์‹๋˜์–ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ
  • innerText

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

    • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

      • ๋น„ํ‘œ์ค€

      • CSS์— ์ˆœ์ข…์ 

        CSS์— ์˜ํ•ด ๋น„ํ‘œ์‹œ(visibility: hidden;)๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ํ…์ŠคํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค.

      • CSS๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฏ€๋กœ textContent ํ”„๋กœํผํ‹ฐ๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค.

  • innerHTML

    • ํ•ด๋‹น ์š”์†Œ์˜ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ์ฝ˜ํ…์ธ ๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ทจ๋“(๋งˆํฌ์—… ํฌํ•จ)
    • ๋งˆํฌ์—…์ด ํฌํ•จ๋œ ์ƒˆ๋กœ์šด ์ฝ˜ํ…์ธ ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ DOM์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

DOM ์กฐ์ž‘ ๋ฐฉ์‹

DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

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

insertAdjacentHTML()

  • insertAdjacentHTML(position, string)

    • ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ํ…์ŠคํŠธ๋ฅผ HTML๋กœ ํŒŒ์‹ฑํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑ๋œ ๋…ธ๋“œ๋ฅผ DOM ํŠธ๋ฆฌ์˜ ์ง€์ •๋œ ์œ„์น˜์— ์‚ฝ์ž…

    • ์ฒซ๋ฒˆ์งธ ์ธ์ž: ์‚ฝ์ž… ์œ„์น˜

      • โ€˜beforebeginโ€™
      • โ€˜afterbeginโ€™
      • โ€˜beforeendโ€™
      • โ€˜afterendโ€™
    • ๋‘๋ฒˆ์งธ ์ธ์ž: ์‚ฝ์ž…ํ•  ์š”์†Œ๋ฅผ ํ‘œํ˜„ํ•œ ๋ฌธ์ž์—ด

innerHTML vs. DOM ์กฐ์ž‘ ๋ฐฉ์‹ vs. insertAdjacentHTML()

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

style

style ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด inline ์Šคํƒ€์ผ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • element.style
    • ์š”์†Œ์˜ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์„ค์ •
    • ์ ‘๊ทผ์ž๋กœ ์‚ฌ์šฉ์‹œ CSS ์„ ์–ธ์„ ๋‹ด์€ CSSStyleDeclaration ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
  • Window.getComputedStyle()
    • ์ธ์ž๋กœ ์ฃผ์–ด์ง„ ์š”์†Œ์˜ ๋ชจ๋“  CSS ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ฐ˜ํ™˜
      • ์Šคํƒ€์ผ์‹œํŠธ์™€ ์†์„ฑ๊ฐ’์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ด ๋ชจ๋‘ ๋ฐ˜์˜๋œ ๊ฒฐ๊ณผ๊ฐ’
logo
Things I've Learned