[Deep Dive] DOM(2)

link717ยท2021๋…„ 9์›” 12์ผ
0

Deep Dive

๋ชฉ๋ก ๋ณด๊ธฐ
24/28
post-thumbnail

๐ŸŒผ 39.2.6 HTML Collection๊ณผ NodeList

  • ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ด๋ฉด์„œ iterableํ•œ ์„ฑ์งˆ์„ ๊ฐ–๊ณ  ์žˆ์–ด for...of๋ฌธ์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํžˆ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜๋œ ๊ฐ์ฒด๋Š” ๋ฐฐ์—ด์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜(forEach, map, etc.)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

  • ๋…ธ๋“œ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•œ live ๊ฐ์ฒด์ด๋‹ค. HTML Collection์€ ์–ธ์ œ๋‚˜ live ๊ฐ์ฒด๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ๊ฐ์ฒด๋ฅผ for๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์— ์ฃผ์˜๋ฅผ ์š”ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    • for ๋ฌธ์„ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํšŒ
    • while๋ฌธ์œผ๋กœ ์š”์†Œ๊ฐ€ ๋‚จ์•„ ์žˆ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ๋ฐ˜๋ณต
    • HTMLCollection์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ˆœํšŒ โญ๏ธ

<script>
  const $elem = document.getElementsByClassName("red");
  
  // class๊ฐ€ 'red'์ธ HTMLCollection ๊ฐ์ฒด์˜ ๋ชจ๋“  ์š”์†Œ์˜ class ๊ฐ’์„ 'blue'๋กœ ๋ณ€๊ฒฝํ•ด๋ผ.
  [...$elem].forEach(elem => elem.className = "blue");
  
  // class๊ฐ€ "red"์ธ HTMLCollection ๊ฐ์ฒด์˜ ๋ชจ๋“  ์š”์†Œ์˜ class ๊ฐ’์„ "green"์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ผ.
  Array.from($elem).forEach(elem => elem.className = "green");
</script>  
  • NodeList๋Š” ๋Œ€๋ถ€๋ถ„ non-live ๊ฐ์ฒด๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋‹ค๋งŒ, childNodes ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” NodeList ๊ฐ์ฒด๋Š” live ๊ฐ์ฒด๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋…ธ๋“œ ๊ฐ์ฒด ํƒ€์ž…๊ณผ ์ƒ๊ด€์—†์ด ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <ul id="fruits">
      <li>Apple</li>
      <li>Banana</li>
      <li>Grape</li>
    </ul>
    <ul>
      <li>html</li>
    </ul>
    <script>
      const $fruits = document.getElementById("fruits");
      const $listFromFruits = $fruits.getElementsByTagName("li");

      // childNodes ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ NodeList ๊ฐ์ฒด
      console.log($fruits.childNodes);
      // NodeList(7) [text, li, text, li, text, li, text]
    </script>
  </body>
</html>

๐ŸŒผ 39.3 ๋…ธ๋“œ ํƒ์ƒ‰

๋…ธ๋“œ ํƒ์ƒ‰ ํ”„๋กœํผํ‹ฐ๋Š” ๋ชจ๋‘ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋กœ setter์—†์ด getter๋งŒ ์กด์žฌํ•˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ํ”„๋กœํผํ‹ฐ์ด๋‹ค. ์ฝ๊ธฐ ์ „์šฉ ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ ์—†์ด ๋ฌด์‹œ๋œ๋‹ค.

Q. ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์ฐฝ์— Node.prototype, Element.prototype์„ ์ž…๋ ฅํ•˜์—ฌ ์ฝ๊ธฐ ์ „์šฉ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

  • Node.prototype.childNodes: ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜์—ฌ NodeList์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜ํ™˜๋œ ๋ฆฌ์ŠคํŠธ์—๋Š” ํ…์ŠคํŠธ ๋…ธ๋“œ๋„ ํฌํ•จ๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

    • ์˜ˆ์‹œ) Node.prototype.firstChild: ํ…์ŠคํŠธ ๋…ธ๋“œ ํ˜น์€ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • Element.prototyle.children: ์ž์‹ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์š”์†Œ ๋…ธ๋“œ๋งŒ HTMLCollection์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜ํ™˜๋œ ๋ฆฌ์ŠคํŠธ์—๋Š” ํ…์ŠคํŠธ ๋…ธ๋“œ๋„ ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

    • ์˜ˆ์‹œ) Element.prototype.firstElementChild: ์š”์†Œ ๋…ธ๋“œ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐ŸŒผ 39.5 ์š”์†Œ ๋…ธ๋“œ์˜ ํ…์ŠคํŠธ ์กฐ์ž‘

  • nodeValue: ํ…์ŠคํŠธ ๋…ธ๋“œ์— Node.prototype.nodeValue๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋…ธ๋“œ ๊ฐ์ฒด์˜ ๊ฐ’, ํ…์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ…์ŠคํŠธ ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • textContent: ์š”์†Œ ๋…ธ๋“œ์— Node.prototype.textContent๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์š”์†Œ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ž์† ๋…ธ๋“œ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์ทจ๋“ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด ๋•Œ, HTML ๋งˆํฌ์—…์€ ๋ฌด์‹œ๋œ๋‹ค.

    • ์š”์†Œ ๋…ธ๋“œ์˜ ์ปจํ…์ธ  ์˜์—ญ์— ์ž์‹ ์š”์†Œ ๋…ธ๋“œ๊ฐ€ ์—†๊ณ  ํ…์ŠคํŠธ๋งŒ ์กด์žฌํ•œ๋‹ค๋ฉด ์‚ฌ์šฉ๋ฒ•์ด ๋ณต์žกํ•œ nodeValue๋ณด๋‹ค textContent๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋” ๊ฐ„๋‹จํ•˜๋‹ค. ๋‹ค๋งŒ, ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋งˆํฌ์—…์ด ํฌํ•จ๋œ ํ…์ŠคํŠธ๋ฅผ ์žฌํ• ๋‹นํ•  ๊ฒฝ์šฐ, HTML์ด ํŒŒ์‹ฑ๋˜์ง€ ์•Š๊ณ  ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ์ธ์‹๋œ๋‹ค.
  • innerText: textContent์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€๋งŒ CSS์— ์ˆœ์ข…์ ์ด๋‹ค. ์ฆ‰, CSS ์Šคํƒ€์ผ๋กœ ๋น„ํ‘œ์‹œ๋กœ ์ง€์ • : visibility: hidden;๋œ ์š”์†Œ ๋…ธ๋“œ์— ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์— ๋…ธ๋„์˜ ํ…์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•˜๊ณ  CSS๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•ด์„œ ์กฐ์ž‘์ด ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์–ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๐ŸŒผ 39.6 DOM ์กฐ์ž‘

  • innerHTML: ์š”์†Œ ๋…ธ๋“œ์— innerHTML ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์š”์†Œ ๋…ธ๋“œ ์‚ฌ์ด์— ์žˆ๋Š” ๋ชจ๋“  HTML ๋งˆํฌ์—…์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด์„œ HTML ๋งˆํฌ์—…์ด ํฌํ•จ๋œ ๋‚ด์šฉ์„ ์žฌํ• ๋‹นํ•  ๊ฒฝ์šฐ, HTML์€ ํŒŒ์‹ฑ๋˜์–ด ๋‚ด์šฉ์ด ์ ์šฉ๋œ๋‹ค.

    • ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ •๋ณด๋ฅผ innerHTML์„ ์ด์šฉํ•ด์„œ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ, ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ… ๊ณต๊ฒฉ(XSS)์— ์ทจ์•ฝํ•˜์—ฌ ์œ„ํ—˜ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ”๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ HTML sanization(์‚ด๊ท ) ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ์•ˆ์ •์„ฑ์ด ๋ณด์žฅ๋œ ๋‚ด์šฉ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. (์ฐธ์กฐ: DOM Purify)

    • ๊ธฐ์กด์˜ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ, DOM ์กฐ์ž‘์‹œ ๋ณ€๊ฒฝํ•  ์œ„์น˜๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์—†์–ด ์š”์†Œ ๋…ธ๋“œ ์‚ฌ์ด์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ธฐ์กด ๋…ธ๋“œ + ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

  • isertAdjacentHTML(position, DOMString): innerHTML๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ƒˆ๋กญ๊ฒŒ ์‚ฝ์ž…ํ•  ์š”์†Œ(DOMString)์˜ ์‚ฝ์ž… ์œ„์น˜(position)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋‹ค๋งŒ XSS ๊ณต๊ฒฉ์—๋Š” ์—ฌ์ „ํžˆ ์ทจ์•ฝํ•˜๋‹ค.

    • position: beforebegin, afterbegin, beforeend, afterend๊ฐ€ ์žˆ๋‹ค.
<!-- beforebegin -->
<p>
  <!-- afterbegin -->
  foo
  <!-- beforeend -->
</p>
<!-- afterend -->

๐ŸŒผ 39.6.3 ๋…ธ๋“œ์˜ ์ƒ์„ฑ๊ณผ ์ถ”๊ฐ€

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <ul id="fruits">
      <li>Apple</li>
    </ul>
    <script>
      const $fruits = document.getElementById("fruits");
      
      // ์š”์†Œ ๋…ธ๋“œ ์ƒ์„ฑ : ํ™€๋กœ ์กด์žฌํ•˜๋Š” ์ƒํƒœ
      const $li = document.createElement("li");
      
      // ํ…์ŠคํŠธ ๋…ธ๋“œ ์ƒ์„ฑ: ํ™€๋กœ ์กด์žฌํ•˜๋Š” ์ƒํƒœ
      const $textNode = document.createTextNode("Banana");
      
      // ์š”์†Œ ๋…ธ๋“œ์— ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€
      // ์š”์†Œ ๋…ธ๋“œ์— ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ • ์—†์ด
      // $li.textContent = "Banana";๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•˜๋‹ค.
      $li.appendChild($textNode);
      
      // $fruits ์œ„์น˜์— ์ƒˆ๋กœ ์ƒ์„ฑํ•œ $li๋ฅผ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
      $fruits.appendChild($li);
    </script>
  </body>
</html>

๋…ธ๋“œ์˜ ์ƒ์„ฑ๊ณผ ์ถ”๊ฐ€ ๊ณผ์ •์—์„œ ๋ณต์ˆ˜๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์ผ์–ด๋‚˜ ์„ฑ๋Šฅ์ ์œผ๋กœ ์ข‹์ง€ ๋ชปํ•˜๊ณ  ๋น„ํšจ์œจ์ ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•ด์„œ ์š”์†Œ์˜ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€๋  ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฐ˜๋ณต ์ž‘์—…์ด ๋๋‚˜๋ฉด ์‹ค์ œ ์‚ฝ์ž…ํ•  ์œ„์น˜์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถˆํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ๊ฐ€ DOM์— ์ถ”๊ฐ€๋˜๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ๋‹ค.

  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ DocumentFragment ๋…ธ๋“œ๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. DOM์— ์ถ”๊ฐ€ํ•  ๋ณต์ˆ˜๊ฐœ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ๋’ค fragment ๋…ธ๋“œ์— ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  fragment ๋…ธ๋“œ๋ฅผ DOM์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ž์‹ ์€ ์ œ๊ฑฐ๋˜๊ณ  ์ƒ์„ฑ๋œ ์ž์‹๋…ธ๋“œ๋งŒ DOM์— ์ถ”๊ฐ€๋œ๋‹ค.

๐ŸŒผ 39.6.5 ๋…ธ๋“œ ์‚ฝ์ž…

insertBefore(newNode, childNode): ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋…ธ๋“œ๋ฅผ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋…ธ๋“œ ์•ž์— ์‚ฝ์ž…ํ•œ๋‹ค. appendChild์™€ ๋‹ค๋ฅด๊ฒŒ ์‚ฝ์ž… ์œ„์น˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๊ฐ€ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ: DOM Exception error ๋ฐœ์ƒ

  • ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๊ฐ€ null์ธ ๊ฒฝ์šฐ: appendChild์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘

๐ŸŒผ 39.6.6 ๋…ธ๋“œ ์ด๋™

๋”์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ทจ๋“ํ•œ ๋’ค appendChild ํ˜น์€ insertBefore๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ์šด ์œ„์น˜์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ฆ‰ ๋…ธ๋“œ ์ด๋™์ด ๋ฐœ์ƒํ•œ๋‹ค.

๐ŸŒผ 39.6.7 ๋…ธ๋“œ ๋ณต์‚ฌ

Node.prototype.cloneNode([deep: true | false])๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋…ธ๋“œ์˜ ์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค. deep์— true๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ž์‹ ๋…ธ๋“œ๊นŒ์ง€ ํฌํ•จํ•œ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ false๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ž๊ธฐ ์ž์‹ ๋งŒ์„ ์–•๊ฒŒ ๋ณต์‚ฌํ•œ๋‹ค. ์–•์€ ๋ณต์‚ฌ๋ฅผ ํ†ตํ•ด ์ด๋ค„์ง„ ๋ณต์‚ฌ๋Š” ์ž์† ๋…ธ๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ…์ŠคํŠธ ๋…ธ๋“œ์กฐ์ฐจ ์—†๋‹ค.

๐ŸŒผ 39.6.8 ๋…ธ๋“œ ๊ต์ฒด

Node.prototype.replaceChild(newChild, oldChild) ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ๋…ธ๋“œ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ต์ฒดํ•œ๋‹ค. ์ด ๋•Œ ๊ต์ฒด๋œ oldChild๋Š” DOM์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.

๐ŸŒผ 39.6.9 ๋…ธ๋“œ ์‚ญ์ œ

Node.prototype.removeChild(child)๋Š” ์ธ์ˆ˜๋กœ ์ „ํ•œ childNode๋ฅผ DOM์—์„œ ์‚ญ์ œํ•œ๋‹ค.

์ถœ์ฒ˜: ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive-์ด์›…๋ชจ

profile
Turtle Never stop

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