๐Ÿ’ป FE

NodeList vs HTMLCollection

Roy Miller 2025. 5. 16. 16:19

NodeList์™€ HTMLCollection์€ ๋ชจ๋‘ DOM(๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ)์—์„œ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•œ(array-like) ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์œผ๋ฉฐ, ์ด ์ฐจ์ด์ ์— ๋”ฐ๋ผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๊ณผ ์ฃผ์˜ํ•  ์ ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.


NodeList vs HTMLCollection: ์ฐจ์ด์  ๋ฐ ํ™œ์šฉ ๊ฐ€๋Šฅ์„ฑ

1. ํ•ต์‹ฌ ์ฐจ์ด: ์‹ค์‹œ๊ฐ„(Live) vs. ์ •์ (Static)

์ด๊ฒƒ์ด ๋‘ ๊ฐ์ฒด์˜ ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์ด๋ฉฐ, ํ™œ์šฉ ๋ฐฉ์‹์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

  • HTMLCollection (์‹ค์‹œ๊ฐ„ - Live)
    • DOM ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, HTMLCollection์„ ์–ป์€ ํ›„์— DOM์—์„œ ํ•ด๋‹น ์ปฌ๋ ‰์…˜์— ํฌํ•จ๋  ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋˜๋ฉด, HTMLCollection ๊ฐ์ฒด๋Š” ๋ณ„๋„์˜ ์ฝ”๋“œ ์‹คํ–‰ ์—†์ด๋„ ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ: DOM์ด ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ตœ์‹  ์ƒํƒœ์˜ ์š”์†Œ ๋ชฉ๋ก์„ ํ•ญ์ƒ ์œ ์ง€ํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: getElementsByTagName์œผ๋กœ ํŠน์ • ํƒœ๊ทธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง).
  • NodeList (๋Œ€๋ถ€๋ถ„ ์ •์  - Static)
    • **๋Œ€๋ถ€๋ถ„ ์ •์ (Static)**์ž…๋‹ˆ๋‹ค. (document.querySelectorAll()์ด ๋ฐ˜ํ™˜ํ•˜๋Š” NodeList๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ์ •์  NodeList์ž…๋‹ˆ๋‹ค.)
    • NodeList๊ฐ€ ์ƒ์„ฑ๋œ ์‹œ์ ์˜ DOM ์Šค๋ƒ…์ƒท์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ๊ทธ ์ดํ›„์˜ DOM ๋ณ€๊ฒฝ ์‚ฌํ•ญ(์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ ๋“ฑ)์„ ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์™ธ: Node.childNodes ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” NodeList๋Š” ์‹ค์‹œ๊ฐ„(live)์ž…๋‹ˆ๋‹ค.
    • ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ: ํŠน์ • ์‹œ์ ์˜ DOM ์ƒํƒœ์— ๋Œ€ํ•œ ๊ณ ์ •๋œ ๋ชฉ๋ก์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋™์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•  ๋•Œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ํฌํ•จํ•˜๋Š” ๋…ธ๋“œ ํƒ€์ž…

  • HTMLCollection
    • ์˜ค์ง Element ๋…ธ๋“œ(HTML ํƒœ๊ทธ ์š”์†Œ)๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: <div>, <span>, <li> ๋“ฑ)
  • NodeList
    • Element ๋…ธ๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Text ๋…ธ๋“œ(ํ…์ŠคํŠธ ๋‚ด์šฉ), Comment ๋…ธ๋“œ(์ฃผ์„) ๋“ฑ ๋ชจ๋“  ์ข…๋ฅ˜์˜ Node ํƒ€์ž…์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: parentNode.childNodes๋Š” ๋ถ€๋ชจ ์š”์†Œ์˜ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ํ…์ŠคํŠธ ๋…ธ๋“œ๋‚˜ ์ฃผ์„ ๋…ธ๋“œ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

3. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ ๋ฐ ์†์„ฑ (ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ)

  • ๊ณตํ†ต์  (๋‘ ๊ฐ์ฒด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ์ผ):
    • length ์†์„ฑ: ํฌํ•จ๋œ ๋…ธ๋“œ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ธ๋ฑ์Šค ์ ‘๊ทผ: collection[0], nodeList[1]์™€ ๊ฐ™์ด ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • for...of ๋ฃจํ”„:ES6์˜ for...of ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • forEach() ๋ฉ”์„œ๋“œ: forEach() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹จ, ์ผ๋ถ€ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” HTMLCollection์— forEach()๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Array.from() ๋“ฑ์œผ๋กœ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ ํ›„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)
  • HTMLCollection์—๋งŒ ์žˆ๋Š” ๊ฒƒ (์ถ”๊ฐ€๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ):
    • item(index) ๋ฉ”์„œ๋“œ: collection.item(0)๊ณผ ๊ฐ™์ด ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. (์ธ๋ฑ์Šค ์ ‘๊ทผ collection[0]๊ณผ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค.)
    • namedItem(name) ๋ฉ”์„œ๋“œ: ์ปฌ๋ ‰์…˜ ๋‚ด์˜ ์š”์†Œ ์ค‘ name ๋˜๋Š” id ์†์„ฑ๊ฐ’์ด ์ฃผ์–ด์ง„ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • NodeList (ํŠนํžˆ ์ •์  NodeList)์˜ ํ™œ์šฉ ํŒ (์ถ”๊ฐ€๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ):
    • NodeList๋Š” forEach() ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ์ง€์›ํ•˜๋ฏ€๋กœ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • NodeList๋ฅผ Array.from(nodeList) ๋˜๋Š” ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ• [...nodeList]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด, map(), filter(), reduce() ๋“ฑ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ•๋ ฅํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ •์  NodeList์˜ ์Šค๋ƒ…์ƒท ํŠน์„ฑ๊ณผ ๊ฒฐํ•ฉ๋˜์–ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

4. ์ƒ์„ฑ๋˜๋Š” ๋ฉ”์„œ๋“œ ์˜ˆ์‹œ

  • HTMLCollection์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ:
    • document.getElementsByTagName()
    • document.getElementsByClassName()
    • element.getElementsByTagName() (ํŠน์ • ์š”์†Œ ๊ธฐ์ค€)
    • element.getElementsByClassName() (ํŠน์ • ์š”์†Œ ๊ธฐ์ค€)
    • element.children (ํ”„๋กœํผํ‹ฐ)
       
  • NodeList๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ:
    • document.querySelectorAll() (์ •์  NodeList)
    • element.querySelectorAll() (์ •์  NodeList)
    • parentNode.childNodes (ํ”„๋กœํผํ‹ฐ, ์‹ค์‹œ๊ฐ„ NodeList)
       

๊ฒฐ๋ก ์ ์œผ๋กœ, HTMLCollection์€ DOM ๋ณ€๊ฒฝ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•˜๋Š” "์‚ด์•„์žˆ๋Š”" ๋ชฉ๋ก์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ง€๋งŒ, Element๋งŒ ํฌํ•จํ•˜๊ณ  forEach ์ง€์›์— ์ œ์•ฝ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด NodeList๋Š” (์ฃผ๋กœ querySelectorAll์„ ํ†ตํ•ด ์–ป๋Š” ๊ฒฝ์šฐ) "์ •์ ์ธ" ์Šค๋ƒ…์ƒท์ด์ง€๋งŒ forEach๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๋ชจ๋“  ๋…ธ๋“œ ํƒ€์ž…์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„๋Œ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์—์„œ๋Š” document.querySelectorAll()์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ ์ธ NodeList๋ฅผ ์–ป์€ ํ›„, ํ•„์š”์— ๋”ฐ๋ผ Array.from() ๋“ฑ์„ ํ†ตํ•ด ์‹ค์ œ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐฐ์—ด์˜ ํ’๋ถ€ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด ๋ณดํŽธ์ ์ž…๋‹ˆ๋‹ค.


์ œ๊ณตํ•ด์ฃผ์‹  ์ด๋ฏธ์ง€์˜ appendChild()์™€ insertAdjacentElement()๋Š” ๋ชจ๋‘ DOM(๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ)์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™์ž‘ ๋ฐฉ์‹, ์‚ฝ์ž… ์œ„์น˜ ์ง€์ • ๋ฐฉ์‹, ๊ทธ๋ฆฌ๊ณ  ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ฐ’์— ์ค‘์š”ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

appendChild()

  • ๋ฌด์—‡์„ ์‚ฝ์ž…ํ•˜๋Š”๊ฐ€?: Node ๊ฐ์ฒด๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Element ๋…ธ๋“œ(<div>, <span> ๋“ฑ)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Text ๋…ธ๋“œ, Comment ๋…ธ๋“œ ๋“ฑ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋…ธ๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์–ด๋””์— ์‚ฝ์ž…ํ•˜๋Š”๊ฐ€?: ํ˜ธ์ถœ๋œ ๋ถ€๋ชจ ์š”์†Œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ๋ฒ•: parentNode.appendChild(newNode)
    • parentNode: ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋ถ€๋ชจ ์š”์†Œ.
    • newNode: ๋ถ€๋ชจ ์š”์†Œ์˜ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€ํ•  Node ๊ฐ์ฒด.
  • ํŠน์ง•:
    • ๋‹จ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋งŒ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋ฉด, ์ถ”๊ฐ€๋œ newNode ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • DOM ์กฐ์ž‘์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

JavaScript
 
// HTML: <div id="parent">
//         <p>๊ธฐ์กด ์ž์‹</p>
//       </div>

const parentDiv = document.getElementById('parent');
const newChildDiv = document.createElement('div');
newChildDiv.textContent = '์ƒˆ๋กœ์šด ๋งˆ์ง€๋ง‰ ์ž์‹';

parentDiv.appendChild(newChildDiv);

// ๊ฒฐ๊ณผ HTML:
// <div id="parent">
//   <p>๊ธฐ์กด ์ž์‹</p>
//   <div>์ƒˆ๋กœ์šด ๋งˆ์ง€๋ง‰ ์ž์‹</div>
// </div>

insertAdjacentElement()

  • ๋ฌด์—‡์„ ์‚ฝ์ž…ํ•˜๋Š”๊ฐ€?: ์˜ค์ง Element ๊ฐ์ฒด๋งŒ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. (ํ…์ŠคํŠธ ๋…ธ๋“œ๋‚˜ ์ฃผ์„ ๋…ธ๋“œ ๋“ฑ์€ ์ง์ ‘ ์‚ฝ์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)
  • ์–ด๋””์— ์‚ฝ์ž…ํ•˜๋Š”๊ฐ€?: **๊ธฐ์ค€ ์š”์†Œ(reference element)**์˜ ์ƒ๋Œ€์ ์ธ ์œ„์น˜์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” HTML ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜๋Š” insertAdjacentHTML()๊ณผ ๋‹ฌ๋ฆฌ, ์ด๋ฏธ ์กด์žฌํ•˜๋Š” Element ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ๋ฒ•: element.insertAdjacentElement(position, newElement)
    • element: ์‚ฝ์ž…์˜ ๊ธฐ์ค€์ด ๋  ์š”์†Œ.
    • position: ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด (๋„ค ๊ฐ€์ง€ ์˜ต์…˜: 'beforebegin', 'afterbegin', 'beforeend', 'afterend').
    • newElement: ์‚ฝ์ž…ํ•  Element ๊ฐ์ฒด.
  • ํŠน์ง•:
    • ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฝ์ž…๋˜๋ฉด, ์‚ฝ์ž…๋œ newElement ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • appendChild()๋ณด๋‹ค ๋” ์œ ์—ฐํ•˜๊ฒŒ ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜•์ œ ์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ž์‹ ์š”์†Œ์˜ ๋งจ ์•ž/๋’ค์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

JavaScript
 
// HTML: <div id="targetElement">
//         <span>์›๋ž˜ ์ž์‹</span>
//       </div>

const targetElement = document.getElementById('targetElement');

// 1. 'beforebegin': targetElement ๋ฐ”๋กœ ์•ž์— ํ˜•์ œ๋กœ ์‚ฝ์ž…
const elementBefore = document.createElement('p');
elementBefore.textContent = 'ํƒ€๊ฒŸ ์•ž ํ˜•์ œ';
targetElement.insertAdjacentElement('beforebegin', elementBefore);
// <p>ํƒ€๊ฒŸ ์•ž ํ˜•์ œ</p><div id="targetElement">...</div>

// 2. 'afterbegin': targetElement ์•ˆ์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹์œผ๋กœ ์‚ฝ์ž…
const elementAfterBegin = document.createElement('h3');
elementAfterBegin.textContent = 'ํƒ€๊ฒŸ ์•ˆ ์ฒซ ์ž์‹';
targetElement.insertAdjacentElement('afterbegin', elementAfterBegin);
// <div id="targetElement"><h3>ํƒ€๊ฒŸ ์•ˆ ์ฒซ ์ž์‹</h3><span>์›๋ž˜ ์ž์‹</span></div>

// 3. 'beforeend': targetElement ์•ˆ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ์‚ฝ์ž…
const elementBeforeEnd = document.createElement('footer');
elementBeforeEnd.textContent = 'ํƒ€๊ฒŸ ์•ˆ ๋ ์ž์‹';
targetElement.insertAdjacentElement('beforeend', elementBeforeEnd);
// <div id="targetElement">...<span>์›๋ž˜ ์ž์‹</span><footer>ํƒ€๊ฒŸ ์•ˆ ๋ ์ž์‹</footer></div>

// 4. 'afterend': targetElement ๋ฐ”๋กœ ๋’ค์— ํ˜•์ œ๋กœ ์‚ฝ์ž…
const elementAfter = document.createElement('hr');
targetElement.insertAdjacentElement('afterend', elementAfter);
// <div id="targetElement">...</div><hr>

์ฃผ์š” ์ฐจ์ด์  ์š”์•ฝ

ํŠน์ง•appendChild()insertAdjacentElement()
์‚ฝ์ž… ๋Œ€์ƒ ๋ชจ๋“  ์ข…๋ฅ˜์˜ Node (Element, Text, Comment ๋“ฑ) ์˜ค์ง Element ๋…ธ๋“œ๋งŒ
์‚ฝ์ž… ์œ„์น˜ ํ˜ธ์ถœ๋œ ๋ถ€๋ชจ ์š”์†Œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ๊ณ ์ • ๊ธฐ์ค€ ์š”์†Œ์˜ ์ƒ๋Œ€์ ์ธ 4๊ฐ€์ง€ ์œ„์น˜ ์ค‘ ์„ ํƒ
ํ˜ธ์ถœ ์ฃผ์ฒด ๋ถ€๋ชจ ์š”์†Œ (parentNode.appendChild(...)) ๊ธฐ์ค€์ด ๋˜๋Š” ์š”์†Œ (element.insertAdjacentElement(...))
์ธ์ž ์‚ฝ์ž…ํ•  ๋…ธ๋“œ 1๊ฐœ ์œ„์น˜ ๋ฌธ์ž์—ด, ์‚ฝ์ž…ํ•  ์š”์†Œ 1๊ฐœ
๋ฐ˜ํ™˜ ๊ฐ’ ์‚ฝ์ž…๋œ Node ์‚ฝ์ž…๋œ Element
์œ ์—ฐ์„ฑ ์ž์‹ ์ถ”๊ฐ€์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ˜•์ œ ๋˜๋Š” ์ž์‹ ์œ„์น˜์— ๋Œ€ํ•œ ์ •๊ตํ•œ ์ œ์–ด
Sheets๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ

์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ง€๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์–ด๋””์— ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ์€์ง€, ๊ทธ๋ฆฌ๊ณ  ์‚ฝ์ž…ํ•˜๋ ค๋Š” ๋Œ€์ƒ์ด Element ๋…ธ๋“œ์ธ์ง€ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋…ธ๋“œ(์˜ˆ: ํ…์ŠคํŠธ ๋…ธ๋“œ)์ธ์ง€์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. insertAdjacentElement()๋Š” appendChild()๋ณด๋‹ค ํ›จ์”ฌ ๋‹ค์–‘ํ•œ ์œ„์น˜์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


insertAdjacentElement()์™€ append()๋Š” ๋ชจ๋‘ DOM์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด์ง€๋งŒ, ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋‚ด์šฉ์„ ์–ด๋””์— ์‚ฝ์ž…ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ธ์ž๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ›๋Š”์ง€์— ์ค‘์š”ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

insertAdjacentElement()

  • ๋ฌด์—‡์„ ์‚ฝ์ž…ํ•˜๋Š”๊ฐ€?: ์˜ค์ง Element ๊ฐ์ฒด๋งŒ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. (ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์€ ์ง์ ‘ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)
  • ์–ด๋””์— ์‚ฝ์ž…ํ•˜๋Š”๊ฐ€?: ํŠน์ • ๊ธฐ์ค€ ์š”์†Œ(element)์˜ ์ƒ๋Œ€์ ์ธ 4๊ฐ€์ง€ ์œ„์น˜(beforebegin, afterbegin, beforeend, afterend) ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๊ธฐ์กด ์š”์†Œ์˜ ํ˜•์ œ ๋…ธ๋“œ(์•ž/๋’ค)๋กœ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด ์š”์†Œ์˜ ์ž์‹ ๋…ธ๋“œ(๋งจ ์•ž/๋งจ ๋’ค)๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๋“ฑ ์ •๊ตํ•œ ์œ„์น˜ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ๋ฒ•: element.insertAdjacentElement(position, newElement)
    • element: ์‚ฝ์ž…์˜ ๊ธฐ์ค€์ด ๋  ์š”์†Œ.
    • position: ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด.
    • newElement: ์‚ฝ์ž…ํ•  Element ๊ฐ์ฒด.
  • ๋ฐ˜ํ™˜ ๊ฐ’: ์‚ฝ์ž…๋œ Element ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    JavaScript
     
    // HTML: <div id="target">๊ธฐ์ค€ ์š”์†Œ</div>
    const target = document.getElementById('target');
    const newParagraph = document.createElement('p');
    newParagraph.textContent = 'ํƒ€๊ฒŸ ์•ž์— ์‚ฝ์ž…๋  ๋‹จ๋ฝ';
    
    target.insertAdjacentElement('beforebegin', newParagraph);
    // ๊ฒฐ๊ณผ HTML: <p>ํƒ€๊ฒŸ ์•ž์— ์‚ฝ์ž…๋  ๋‹จ๋ฝ</p><div id="target">๊ธฐ์ค€ ์š”์†Œ</div>
    

append()

  • ๋ฌด์—‡์„ ์‚ฝ์ž…ํ•˜๋Š”๊ฐ€?: **์—ฌ๋Ÿฌ ๊ฐœ์˜ Node ๊ฐ์ฒด (Element, Text ๋“ฑ) ๋˜๋Š” ํ…์ŠคํŠธ ๋ฌธ์ž์—ด(DOMString)**์„ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์€ ์ž๋™์œผ๋กœ Text ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค.
  • ์–ด๋””์— ์‚ฝ์ž…ํ•˜๋Š”๊ฐ€?: ํ˜ธ์ถœ๋œ ๋ถ€๋ชจ ์š”์†Œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ธ์ž๋ฅผ ๋„˜๊ธฐ๋ฉด ๋ชจ๋‘ ๋งˆ์ง€๋ง‰ ์ž์‹๋“ค๋กœ ์ˆœ์„œ๋Œ€๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ๋ฒ•: parentNode.append(nodeOrString1, nodeOrString2, ...)
    • parentNode: ์ƒˆ๋กœ์šด ๋…ธ๋“œ ๋˜๋Š” ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋ถ€๋ชจ ์š”์†Œ.
    • nodeOrStringX: ์ถ”๊ฐ€ํ•  Node ๊ฐ์ฒด ๋˜๋Š” ํ…์ŠคํŠธ ๋ฌธ์ž์—ด.
  • ๋ฐ˜ํ™˜ ๊ฐ’: undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    JavaScript
     
    // HTML: <ul id="myList">
    //         <li>์ฒซ ๋ฒˆ์งธ ์•„์ดํ…œ</li>
    //       </ul>
    
    const myList = document.getElementById('myList');
    const newItem = document.createElement('li');
    newItem.textContent = '์ƒˆ๋กœ์šด ์•„์ดํ…œ';
    
    myList.append(newItem, '์ด๊ฒƒ์€ ํ…์ŠคํŠธ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.', document.createElement('hr'));
    // ๊ฒฐ๊ณผ HTML:
    // <ul id="myList">
    //   <li>์ฒซ ๋ฒˆ์งธ ์•„์ดํ…œ</li>
    //   <li>์ƒˆ๋กœ์šด ์•„์ดํ…œ</li>
    //   ์ด๊ฒƒ์€ ํ…์ŠคํŠธ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.
    //   <hr>
    // </ul>
    

์ฃผ์š” ์ฐจ์ด์  ์š”์•ฝ

ํŠน์ง•insertAdjacentElement()append()
์‚ฝ์ž… ๋Œ€์ƒ ์˜ค์ง Element ๋…ธ๋“œ๋งŒ Node (Element, Text ๋“ฑ) ๋ฐ DOMString(ํ…์ŠคํŠธ) ๋ชจ๋‘ ๊ฐ€๋Šฅ
์‚ฝ์ž… ์œ„์น˜ ๊ธฐ์ค€ ์š”์†Œ์˜ ์ƒ๋Œ€์ ์ธ 4๊ฐ€์ง€ ์œ„์น˜ ์ค‘ ์„ ํƒ (ํ˜•์ œ ๋˜๋Š” ์ž์‹) ํ˜ธ์ถœ๋œ ๋ถ€๋ชจ ์š”์†Œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ๋งŒ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
ํ˜ธ์ถœ ์ฃผ์ฒด ๊ธฐ์ค€์ด ๋˜๋Š” ์š”์†Œ (element.insertAdjacentElement(...)) ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋‹ด์„ ๋ถ€๋ชจ ์š”์†Œ (parentNode.append(...))
์ธ์ž ๊ฐœ์ˆ˜ position ๋ฌธ์ž์—ด + ์‚ฝ์ž…ํ•  Element ๋…ธ๋“œ 1๊ฐœ ์‚ฝ์ž…ํ•  ๋…ธ๋“œ/๋ฌธ์ž์—ด ์—ฌ๋Ÿฌ ๊ฐœ
๋ฐ˜ํ™˜ ๊ฐ’ ์‚ฝ์ž…๋œ Element ๊ฐ์ฒด undefined
์œ ์—ฐ์„ฑ ํ˜•์ œ/์ž์‹ ์œ„์น˜์— ๋Œ€ํ•œ ์ •๊ตํ•œ ์ œ์–ด ์—ฌ๋Ÿฌ ์ž์‹ ์š”์†Œ(ํ…์ŠคํŠธ ํฌํ•จ)๋ฅผ ํ•œ ๋ฒˆ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๊ฒฐ์„ฑ
Sheets๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ

์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ํŠน์ • ์œ„์น˜์— ์ •๋ฐ€ํ•˜๊ฒŒ ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด (beforebegin, afterend ๋“ฑ์œผ๋กœ ํ˜•์ œ ์š”์†Œ์ฒ˜๋Ÿผ): insertAdjacentElement()
  • ๋ถ€๋ชจ ์š”์†Œ์˜ ๋งจ ๋งˆ์ง€๋ง‰์— ์—ฌ๋Ÿฌ ์ž์‹ ์š”์†Œ๋‚˜ ํ…์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด: append()


DOM ์š”์†Œ ์กฐ์ž‘ ๋ฐฉ๋ฒ• ์š”์•ฝ

์ œ๊ณตํ•ด์ฃผ์‹  ์ž๋ฃŒ๋Š” ์›น ํŽ˜์ด์ง€์˜ DOM(Document Object Model) ์š”์†Œ๋ฅผ ์ƒ์„ฑ, ์‚ฝ์ž…, ๊ต์ฒด, ์ œ๊ฑฐํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ง€์›์— ๋Œ€ํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ๊ณผ ๊ฐ ๋ฐฉ๋ฒ•์˜ ์žฅ๋‹จ์ ๋„ ํ•จ๊ป˜ ์ œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


1. ์ƒ์„ฑ ๋ฐ ์‚ฝ์ž…

DOM์— ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

1.1. HTML ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ (๋ฌธ์ž์—ด ๋ฐฉ์‹)

  • innerHTML:
    • ํŠน์ • ์š”์†Œ์˜ innerHTML ์†์„ฑ์— HTML ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•˜๋ฉด, ํ•ด๋‹น ์š”์†Œ์˜ ๊ธฐ์กด ๋‚ด์šฉ์ด ๋ชจ๋‘ ์™„์ „ํžˆ ์ƒˆ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒด๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์š”์†Œ ๋‚ด ๋ชจ๋“  HTML ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ์ƒˆ๋กญ๊ฒŒ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
       
    • ์˜ˆ์‹œ:
      JavaScript
       
      const root = document.getElementById('root-el');
      root.innerHTML = `
          <div>
              <h2>Welcome!</h2>
              <p>This is all created & rendered automatically!</p>
          </div>
      `;
      
  • insertAdjacentHTML():
    • HTML ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜์—ฌ DOM ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ, ํŠน์ • ์š”์†Œ์˜ ์ƒ๋Œ€์ ์ธ ์œ„์น˜์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋‚ด์šฉ์„ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
       
    • ์œ„์น˜ ์˜ต์…˜: beforebegin (์š”์†Œ ์ด์ „), afterbegin (์š”์†Œ ๋ฐ”๋กœ ์•ˆ์—์„œ ์ฒ˜์Œ ์ž์‹ ์ด์ „), beforeend (์š”์†Œ ๋ฐ”๋กœ ์•ˆ์—์„œ ๋งˆ์ง€๋ง‰ ์ž์‹ ์ดํ›„), afterend (์š”์†Œ ์ดํ›„).
       
    • ์žฅ์ : DOM ํŠธ๋ฆฌ๋ฅผ ๋ชจ๋‘ ์žฌ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
       
    • ์˜ˆ์‹œ:
      JavaScript
       
      const root = document.getElementById('root-el');
      root.insertAdjacentHTML('afterbegin', `
          <div>
              <h2>Welcome!</h2>
              <p>This is all created & rendered automatically!</p>
          </div>
      `);
      

1.2. DOM ๊ฐ์ฒด๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‚ฝ์ž…ํ•˜๊ธฐ (๊ฐ์ฒด ๋ฐฉ์‹)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ์ง์ ‘ DOM ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ์ด๋ฅผ ๊ธฐ์กด DOM ํŠธ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 
  • ์žฅ์ : ์ƒ์„ฑ๋œ DOM ๊ฐ์ฒด์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
     
  • ๋‹จ์ : HTML ๋ฌธ์ž์—ด ๋ฐฉ์‹๋ณด๋‹ค ๋” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
     

์‚ฝ์ž…ํ•˜๋Š” ๋ฉ”์„œ๋“œ:

  • append():
    • ๋ถ€๋ชจ ์š”์†Œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ Node ๊ฐ์ฒด ๋˜๋Š” ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์€ ์ž๋™์œผ๋กœ ํ…์ŠคํŠธ ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
       
    • ์˜ˆ์‹œ:
      JavaScript
       
      const someParagraph = document.createElement('p');
      const root = document.getElementById('root-el');
      root.append(someParagraph); // root์˜ ๋์— ์‚ฝ์ž…
      
    • ๋ธŒ๋ผ์šฐ์ € ์ง€์›: ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž˜ ์ง€์›๋ฉ๋‹ˆ๋‹ค. IE์—์„œ๋Š” appendChild()๊ฐ€ ์„ ํ˜ธ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
       
  • prepend():
    • ๋ถ€๋ชจ ์š”์†Œ์˜ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ์ž์‹์œผ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ Node ๊ฐ์ฒด ๋˜๋Š” ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
       
    • ๋ธŒ๋ผ์šฐ์ € ์ง€์›: ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž˜ ์ง€์›๋ฉ๋‹ˆ๋‹ค. IE์—์„œ๋Š” insertBefore()๊ฐ€ ์„ ํ˜ธ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
       
  • before() / after():
    • before()๋Š” ๋Œ€์ƒ ์š”์†Œ์˜ ๋ฐ”๋กœ ์•ž์— ํ˜•์ œ ์š”์†Œ๋กœ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋‚˜ ํ…์ŠคํŠธ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
       
    • after()๋Š” ๋Œ€์ƒ ์š”์†Œ์˜ ๋ฐ”๋กœ ๋’ค์— ํ˜•์ œ ์š”์†Œ๋กœ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋‚˜ ํ…์ŠคํŠธ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
       
    • ๋ธŒ๋ผ์šฐ์ € ์ง€์›: ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜์ง€๋งŒ, IE์™€ Safari๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IE์—์„œ๋Š” insertBefore() ๋˜๋Š” insertAdjacentElement()๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
       

์ค‘์š” ์ฐธ๊ณ  ์‚ฌํ•ญ (์‚ฝ์ž… ์‹œ): ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ, ์ด๋ฏธ DOM์— ์‚ฝ์ž…๋œ ์š”์†Œ๋ฅผ ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๋ฉด ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์ƒˆ๋กœ์šด ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์š”์†Œ๋ฅผ ๋ณต์‚ฌํ•˜๋ ค๋ฉด someElement.cloneNode(true)์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

2. ๊ต์ฒด (Replace)

DOM์˜ ๊ธฐ์กด ์š”์†Œ๋ฅผ ๋‹ค๋ฅธ ์š”์†Œ๋กœ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • replaceWith():
    • ๋Œ€์ƒ ์š”์†Œ๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋‚˜ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๊ธฐ ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค.
       
    • ๋ธŒ๋ผ์šฐ์ € ์ง€์›: ์ ์ ˆํ•œ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์„ ์ œ๊ณตํ•˜์ง€๋งŒ, IE๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.
       
  • replaceChild():
    • ๋ถ€๋ชจ ์š”์†Œ์˜ ์ž์‹ ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
       
    • ๋ธŒ๋ผ์šฐ์ € ์ง€์›: ๊ด‘๋ฒ”์œ„ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์„ ์ œ๊ณตํ•˜์ง€๋งŒ, replaceWith()๋ณด๋‹ค ์ฝ”๋“œ๋ฅผ ๋” ๋งŽ์ด ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IE๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”.
       

3. ์ œ๊ฑฐ (Remove)

DOM์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • someElement.innerHTML = '':
    • someElement ๋‚ด๋ถ€์˜ ๋ชจ๋“  HTML ๋‚ด์šฉ์„ ๋น„์›Œ์„œ ๋ Œ๋”๋ง๋œ ๋ชจ๋“  ์ž์‹ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
       
  • someElement.remove():
    • DOM์—์„œ ๋‹จ์ผ ์š”์†Œ(someElement)๋ฅผ ์ง์ ‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
       
    • ๋ธŒ๋ผ์šฐ์ € ์ง€์›: ํ›Œ๋ฅญํ•˜์ง€๋งŒ IE๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IE์—์„œ๋Š” removeChild()๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
       
  • someElement.parentNode.removeChild(someElement):
    • ๋ถ€๋ชจ ์š”์†Œ์—์„œ ์ œ๊ณต๋œ ์ž์‹ ์š”์†Œ(someElement)๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
       
    • ๋ธŒ๋ผ์šฐ์ € ์ง€์›: ๊ด‘๋ฒ”์œ„ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์„ ์ œ๊ณตํ•˜์ง€๋งŒ, remove()๋ณด๋‹ค ๋” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
       

4. ํ…์ŠคํŠธ ๋…ธ๋“œ ์ฒ˜๋ฆฌ

ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฝ์ž…ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • someElement.textContent = '...':
    • ํŠน์ • ์š”์†Œ์˜ textContent ์†์„ฑ์— ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•˜๋ฉด, ํ•ด๋‹น ์š”์†Œ์˜ ๋ชจ๋“  ๊ธฐ์กด ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
       
    • ์˜ˆ์‹œ: someElement.textContent = 'Hi there!';
       
  • ๊ธฐ์กด ํ…์ŠคํŠธ์— ์ถ”๊ฐ€:
    • someElement.textContent = someElement.textContent + 'More text!'; ์™€ ๊ฐ™์ด ๊ธฐ์กด textContent์— ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.