Skip to content

Latest commit

ย 

History

History
583 lines (416 loc) ยท 19.7 KB

039_(39.6~)_DOM.md

File metadata and controls

583 lines (416 loc) ยท 19.7 KB

39 DOM


39.6 DOM ์กฐ์ž‘

DOM ์กฐ์ž‘์€ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ DOM์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋…ธ๋“œ๋ฅผ ์‚ญ์ œ ๋˜๋Š” ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. DOM ์กฐ์ž‘์— ์˜ํ•ด DOM์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋ฉด ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์›์ธ์ด ๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ๋‹ค๋ฃจ๋Š” DOM ์กฐ์ž‘์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ฃผ์˜ํ•ด์„œ ๋‹ค๋ฃจ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

39.6.1 innerHTML

Element.prototype.innerHTML ํ”„๋กœํผํ‹ฐ๋Š” setter์™€ getter ๋ชจ๋‘ ์กด์žฌํ•˜๋Š” ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋กœ์„œ ์š”์†Œ ๋…ธ๋“œ์˜ HTML ๋งˆํฌ์—…์„ ์ทจ๋“ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

[์˜ˆ์ œ 39-43]
<html>
  <body>
    <ul id="fruits">
      <li class="apple">Apple</li>
    </ul>
  </body>
  <script>
    const $fruits = document.getElementById('fruits');

    // ๋…ธ๋“œ ์ถ”๊ฐ€
    $fruits.innerHTML += '<li class="banana">Banana</li>';

    // ๋…ธ๋“œ ๊ต์ฒด
    $fruits.innerHTML = '<li class="orange">Orange</li>';

    // ๋…ธ๋“œ ์‚ญ์ œ
    $fruits.innerHTML = '';
  </script>
</html>

textContent ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด HTML ๋งˆํฌ์—…์„ ๋ฌด์‹œํ•˜๊ณ  ํ…์ŠคํŠธ๋งŒ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ innerHTML ํ”„๋กœํผํ‹ฐ๋Š” HTML ๋งˆํฌ์—…์ด ํฌํ•จ๋œ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

innerHTML ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ DOM ์กฐ์ž‘์€ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด๋ผ๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. HTML ๋งˆํฌ์—… ๋‚ด์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•…์„ฑ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • innerHTML ๋‹จ์  -ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ ๊ณต๊ฒฉ ์ทจ์•ฝ -์š”์†Œ๋…ธ๋“œ์˜ ํ• ๋‹นํ•  ๊ฒฝ์šฐ ๊ธฐ์กด ์š”์†Œ๋…ธ๋“œ ๋ชจ๋“  ์ž์‹์„ ์ œ๊ฑฐํ•˜๊ณ  ํ• ๋‹น -๋ณต์žกํ•œ ์š”์†Œ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค


39.6.2 insertAdjacentHTML ๋ฉ”์„œ๋“œ

Element.prototype.insertAdjacentHTML(position, DOMString) ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ์กด ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.


insertAdjacentHTML ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ HTML ๋งˆํฌ์—… ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ ์ƒ์„ฑ๋œ ๋…ธ๋“œ๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•  ์œ„์น˜์— ์‚ฝ์ž…ํ•˜์—ฌ DOM์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ค€์ ์ด ๋˜๋Š” ์š”์†Œ์— ๋”ฐ๋ผ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • 'beforebegin': ์š”์†Œ์˜ ์•ž
  • 'afterbegin': ์š”์†Œ ์ฒซ๋ฒˆ์งธ ์ž์‹์˜ ์•ž, ์š”์†Œ ๋‚ด๋ถ€์˜ ์ฒซ๋ฒˆ์งธ
  • 'beforeend': ์š”์†Œ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋’ค, ์š”์†Œ ๋‚ด๋ถ€์˜ ๋งˆ์ง€๋ง‰
  • 'afterend': ์š”์†Œ์˜ ๋’ค

๐Ÿ“Œ insertAdjacentHTML ๋ฉ”์„œ๋“œ๋Š” HTML ๋งˆํฌ์—… ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜๋ฏ€๋กœ ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ… ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋‹ค๋Š” ์ ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. innerHTML ํ”„๋กœํผํ‹ฐ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฆ…๋‹ˆ๋‹ค.



[์˜ˆ์ œ 39-50]
<html>
  <body>
    <!-- beforebegin -->
    <div id="foo">
      <!-- afterbegin -->
      text
      <!-- beforeend -->
    </div>
    <!-- afterend -->
  </body>
  <script>
    const $foo = document.getElementById('foo');

    $foo.insertAdjacentHTML('beforebegin', '<p>beforebegin</p>');
    $foo.insertAdjacentHTML('afterbegin', '<p>afterbegin</p>');
    $foo.insertAdjacentHTML('beforeend', '<p>beforeend</p>');
    $foo.insertAdjacentHTML('afterend', '<p>afterend</p>');
  </script>
</html>


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


[์˜ˆ์ œ 39-51]
<html>
  <body>
    <ul id="fruits">
      <li>Apple</li>
    </ul>
  </body>
  <script>
    const $fruits = document.getElementById('fruits');

    // 1. ์š”์†Œ ๋…ธ๋“œ ์ƒ์„ฑ
    const $li = document.createElement('li');

    // 2. ํ…์ŠคํŠธ ๋…ธ๋“œ ์ƒ์„ฑ
    const textNode = document.createTextNode('Banana');

    // 3. ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ $li ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
    $li.appendChild(textNode);

    // 4. $li ์š”์†Œ ๋…ธ๋“œ๋ฅผ #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
    $fruits.appendChild($li);
  </script>
</html>	

DOM์€ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ์ƒ์„ฑ/์‚ฝ์ž…/์‚ญ์ œ/์น˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๋…ธ๋“œ์˜ ์ƒ์„ฑ๊ณผ ์ถ”๊ฐ€
  • ์š”์†Œ ๋…ธ๋“œ ์ƒ์„ฑ: ํƒœ๊ทธ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

  • ํ…์ŠคํŠธ ๋…ธ๋“œ ์ƒ์„ฑ: ํ…์ŠคํŠธ ๋…ธ๋“œ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฌธ์ž์—ด์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

  • ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€: appendChild() ์‚ฌ์šฉํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜ childNode์—๊ฒŒ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋…ธ๋“œ๋ฅผ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํ•œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์†Œ ๋…ธ๋“œ๋ฅผ DOM์— ์ถ”๊ฐ€: ์—ฐ๊ฒฐํ•œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ƒˆ๋กญ๊ฒŒ์ƒ์„ฑํ•œ ์š”์†Œ ๋…ธ๋“œ๊ฐ€ DOM์— ์ถ”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


39.6.4 ๋ณต์ˆ˜์˜ ๋…ธ๋“œ ์ƒ์„ฑ๊ณผ ์ถ”๊ฐ€


[์˜ˆ์ œ 39-51]
<html>
  <body>
    <ul id="fruits"></ul>
  </body>
  <script>
    const $fruits = document.getElementById('fruits');

    // DocumentFragment ๋…ธ๋“œ ์ƒ์„ฑ
    const $fragment = document.createDocumentFragment();

    ['Apple', 'Banana', 'Orange'].forEach(text => {
      // 1. ์š”์†Œ ๋…ธ๋“œ ์ƒ์„ฑ
      const $li = document.createElement('li');

      // 2. ํ…์ŠคํŠธ ๋…ธ๋“œ ์ƒ์„ฑ
      const textNode = document.createTextNode(text);

      // 3. ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ $li ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
      $li.appendChild(textNode);

      // 4. $li ์š”์†Œ ๋…ธ๋“œ๋ฅผ DocumentFragment ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
      $fragment.appendChild($li);
    });

    // 5. DocumentFragment ๋…ธ๋“œ๋ฅผ #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
    $fruits.appendChild($fragment);
  </script>
</html>

๋จผ์ € DocumentFragment ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  DOM์— ์ถ”๊ฐ€ํ•  ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ DocumentFragment ๋…ธ๋“œ์— ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ, DocumentFragment ๋…ธ๋“œ๋ฅผ ๊ธฐ์กด DOM์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ, ์‹ค์ œ๋กœ DOM ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๋ฒˆ๋ฟ์ด๋ฉฐ ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๋„ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. DOM์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๊ฐ๊ฐ ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŒ…์„ ์•ผ๊ธฐ์‹œํ‚ต๋‹ˆ๋‹ค.DOM์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋†’์€ ๋น„์šฉ์ด ๋“œ๋Š” ์ฒ˜๋ฆฌ์ด๋ฏ€๋กœ ๊ฐ€๊ธ‰์  ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ํŽธ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ ๋…ธ๋“œ๋ฅผ DOM์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ DocumentFragment ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.


39.6.5 ๋…ธ๋“œ ์‚ฝ์ž…


๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€

Node.prototype.appendChild ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋…ธ๋“œ๋ฅผ ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ DOM์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๊ณ  ์–ธ์ œ๋‚˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

[์˜ˆ์ œ 39-62]
<html>
  <body>
    <ul id="fruits">
      <li>Apple</li>
      <li>Banana</li>
    </ul>
  </body>
  <script>
    // ์š”์†Œ ๋…ธ๋“œ ์ƒ์„ฑ
    const $li = document.createElement('li');

    // ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ $li ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
    $li.appendChild(document.createTextNode('Orange'));

    // $li ์š”์†Œ ๋…ธ๋“œ๋ฅผ #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
    document.getElementById('fruits').appendChild($li);
  </script>
</html>

์ง€์ •ํ•œ ์œ„์น˜์— ๋…ธ๋“œ ์‚ฝ์ž…

Node.prototype.insertBefore(newNode, childNode) ๋ฉ”์„œ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋…ธ๋“œ๋ฅผ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋…ธ๋“œ ์•ž์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.


[์˜ˆ์ œ 39-63]
<html>
  <body>
    <ul id="fruits">
      <li>Apple</li>
      <li>Banana</li>
    </ul>
  </body>
  <script>
    const $fruits = document.getElementById('fruits');

    // ์š”์†Œ ๋…ธ๋“œ ์ƒ์„ฑ
    const $li = document.createElement('li');

    // ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ $li ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
    $li.appendChild(document.createTextNode('Orange'));

    // $li ์š”์†Œ ๋…ธ๋“œ๋ฅผ #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ ์•ž์— ์‚ฝ์ž…
    $fruits.insertBefore($li, $fruits.lastElementChild);
    // Apple - Orange - Banana
  </script>
</html>

39.6.6 ๋…ธ๋“œ ์ด๋™


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

[์˜ˆ์ œ 39-66]
<html>
  <body>
    <ul id="fruits">
      <li>Apple</li>
      <li>Banana</li>
      <li>Orange</li>
    </ul>
  </body>
  <script>
    const $fruits = document.getElementById('fruits');

    // ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ทจ๋“
    const [$apple, $banana, ] = $fruits.children;

    // ์ด๋ฏธ ์กด์žฌํ•˜๋Š” $apple ์š”์†Œ ๋…ธ๋“œ๋ฅผ #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋กœ ์ด๋™
    $fruits.appendChild($apple); // Banana - Orange - Apple

    // ์ด๋ฏธ ์กด์žฌํ•˜๋Š” $banana ์š”์†Œ ๋…ธ๋“œ๋ฅผ #fruits ์š”์†Œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ ์•ž์œผ๋กœ ์ด๋™
    $fruits.insertBefore($banana, $fruits.lastElementChild);
    // Orange - Banana - Apple
  </script>
</html>

39.6.7 ๋…ธ๋“œ ๋ณต์‚ฌ


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


[์˜ˆ์ œ 39-67]
<html>
  <body>
    <ul id="fruits">
      <li>Apple</li>
    </ul>
  </body>
  <script>
    const $fruits = document.getElementById('fruits');
    const $apple = $fruits.firstElementChild;

    // $apple ์š”์†Œ๋ฅผ ์–•์€ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ๋ณธ์„ ์ƒ์„ฑ. ํ…์ŠคํŠธ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ์‚ฌ๋ณธ์ด ์ƒ์„ฑ๋œ๋‹ค.
    const $shallowClone = $apple.cloneNode();
    // ์‚ฌ๋ณธ ์š”์†Œ ๋…ธ๋“œ์— ํ…์ŠคํŠธ ์ถ”๊ฐ€
    $shallowClone.textContent = 'Banana';
    // ์‚ฌ๋ณธ ์š”์†Œ ๋…ธ๋“œ๋ฅผ #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
    $fruits.appendChild($shallowClone);

    // #fruits ์š”์†Œ๋ฅผ ๊นŠ์€ ๋ณต์‚ฌํ•˜์—ฌ ๋ชจ๋“  ์ž์† ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋œ ์‚ฌ๋ณธ์„ ์ƒ์„ฑ
    const $deepClone = $fruits.cloneNode(true);
    // ์‚ฌ๋ณธ ์š”์†Œ ๋…ธ๋“œ๋ฅผ #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€
    $fruits.appendChild($deepClone);
  </script>
</html>

39.6.8 ๋…ธ๋“œ ๊ต์ฒด


Node.prototype.replaceChild(newChild, oldChild) ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ต์ฒดํ•  ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ, ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ต์ฒด๋  ๋…ธ๋“œ๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํ˜ธ์ถœํ•œ ๋…ธ๋“œ์˜ ์ž์‹๋…ธ๋“œ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.


[์˜ˆ์ œ 39-68]
<html>
  <body>
    <ul id="fruits">
      <li>Apple</li>
    </ul>
  </body>
  <script>
    const $fruits = document.getElementById('fruits');

    // ๊ธฐ์กด ๋…ธ๋“œ์™€ ๊ต์ฒดํ•  ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑ
    const $newChild = document.createElement('li');
    $newChild.textContent = 'Banana';

    // #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ์š”์†Œ ๋…ธ๋“œ๋ฅผ $newChild ์š”์†Œ ๋…ธ๋“œ๋กœ ๊ต์ฒด
    $fruits.replaceChild($newChild, $fruits.firstElementChild);
  </script>
</html>

39.6.9 ๋…ธ๋“œ ์‚ญ์ œ


Node.prototype.removeChild(child) ๋ฉ”์„œ๋“œ๋Š” child ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋…ธ๋“œ๋ฅผ DOM์—์„œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.


[์˜ˆ์ œ 39-69]
<html>
  <body>
    <ul id="fruits">
      <li>Apple</li>
      <li>Banana</li>
    </ul>
  </body>
  <script>
    const $fruits = document.getElementById('fruits');

    // #fruits ์š”์†Œ ๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ DOM์—์„œ ์‚ญ์ œ
    $fruits.removeChild($fruits.lastElementChild);
  </script>
</html>



39.7 ์–ดํŠธ๋ฆฌ๋ทฐํŠธ


39.7.1 ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ์™€ attributes ํ”„๋กœํผํ‹ฐ


HTML ๋ฌธ์„œ์˜ ๊ตฌ์„ฑ ์š”์†Œ์ธ HTML ์š”์†Œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธ€๋กœ๋ฒŒ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ(id, class, style, title, lang, tabindex, draggable, hidden ๋“ฑ), ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ(onclick, onchange, onfocus, onblur, oninput, onkeypress, onkeydown, onkeyup, onload ๋“ฑ) ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTML ์š”์†Œ์˜ ๋™์ž‘์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ๋ชจ๋“  HTML ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, type, value, checked ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” input ์š”์†Œ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. HTML ๋ฌธ์„œ๊ฐ€ ํŒŒ์‹ฑ๋  ๋•Œ HTML ์š”์†Œ์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด ์š”์†Œ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ attributes ํ”„๋กœํผํ‹ฐ๋Š” getter๋งŒ ์กด์žฌํ•˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ์ ‘๊ทผ์ž ์†์„ฑ์ด๋ฏ€๋กœ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.


39.7.2 HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์กฐ์ž‘


HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด Element.prototype.getAttribute(attributeName) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด Element.prototype.setAttribute(attributeName, attributeValue) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


[์˜ˆ์ œ39-72]
<html>
<body>
  <input id="user" type="text" value="ungmo2">
  <script>
    const $input = document.getElementById('user');

    // value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ ์ทจ๋“
    const inputValue = $input.getAttribute('value');
    console.log(inputValue); // ungmo2

    // value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ ๋ณ€๊ฒฝ
    $input.setAttribute('value', 'foo');
    console.log($input.getAttribute('value')); // foo
  </script>
</body>
</html>
  • Element.prototype.hasAttribute(attributeName) : ํŠน์ • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ

  • Element.prototype.removeAttribute(attributeName) : ํŠน์ • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์‚ญ์ œ


39.7.3 HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ vs DOM ํ”„๋กœํผํ‹ฐ


HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ์—ญํ• ์€ HTML ์š”์†Œ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์€ HTML ์š”์†Œ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ด๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๋ฐ”๊พธ๋”๋ผ๋„ ์‹ค์ œ๋กœ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ฒซ ๋ Œ๋”๋ง ์ดํ›„ ์‚ฌ์šฉ์ž๊ฐ€ input ์š”์†Œ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ƒํ™ฉ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์š”์†Œ ๋…ธ๋“œ๋Š” ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. input ์š”์†Œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ์˜ํ•ด ๋ณ€ํ™”ํ•˜๋Š”, ์‚ด์•„์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์š”์†Œ ๋…ธ๋“œ๋Š” 2๊ฐœ์˜ ์ƒํƒœ, ์ฆ‰ ์ดˆ๊ธฐ ์ƒํƒœ์™€ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์š”์†Œ ๋…ธ๋“œ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์š”์†Œ ๋…ธ๋“œ์˜ ์ตœ์‹  ์ƒํƒœ๋Š” DOMํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


[์˜ˆ์ œ39-75]
<html>
<body>
  <input id="user" type="text" value="ungmo2">
  <script>
    const $input = document.getElementById('user');

    // attributes ํ”„๋กœํผํ‹ฐ์— ์ €์žฅ๋œ value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’
    console.log($input.getAttribute('value')); // ungmo2

    // ์š”์†Œ ๋…ธ๋“œ์˜ value ํ”„๋กœํผํ‹ฐ์— ์ €์žฅ๋œ value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’
    console.log($input.value); // ungmo2
    // attributes ํ”„๋กœํผํ‹ฐ์— ์ €์žฅ๋œ value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ ์ทจ๋“ํ•œ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์–ธ์ œ๋‚˜ ๋™์ผํ•˜๋‹ค.
    document.getElementById('user').getAttribute('value'); //  ungmo2
  </script>
</body>
</html>

  • HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ DOM ํ”„๋กœํผํ‹ฐ์˜ ๋Œ€์‘ ๊ด€๊ณ„

    • id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ id ํ”„๋กœํผํ‹ฐ๋Š” 1:1๋กœ ๋Œ€์‘ํ•˜๋ฉฐ, ๋™์ผํ•œ ๊ฐ’์œผ๋กœ์—ฐ๋™ํ•œ๋‹ค.
    • input ์š”์†Œ์˜ value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ value ํ”„๋กœํผํ‹ฐ๋Š” 1:1๋กœ ๋Œ€์‘ํ•˜๋ฉฐ, ํ•˜์ง€๋งŒ value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ์ดˆ๊ธฐ์ƒํƒœ๋ฅผ, value ํ”„๋กœํผํ‹ฐ๋Š” ์ตœ์‹ ์ƒํƒœ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ className, classLis ํ”„๋กœํผํ‹ฐ๋Š” ๋Œ€์‘ํ•œ๋‹ค.
    • for ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ htmlFor ํ”„๋กœํผํ‹ฐ์™€ 1:1 ๋Œ€์‘ํ•œ๋‹ค.
    • textContent ํ”„๋กœํผํ‹ฐ๋Š” ๋Œ€์‘ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • DOM ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์˜ ํƒ€์ž… getAttribute ๋ฉ”์„œ๋“œ๋กœ ์ทจ๋“ํ•œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์€ ์–ธ์ œ๋‚˜ ๋ฌธ์ž์—ด์ด๋‹ค. ํ•˜์ง€๋งŒ DOM ํ”„๋กœํผํ‹ฐ๋กœ ์ทจ๋“ํ•œ ์ตœ์‹  ์ƒํƒœ ๊ฐ’์€ ๋ฌธ์ž์—ด์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.(checkbox ์š”์†Œ์˜ checked ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์€ ๋ฌธ์ž์—ด์ด์ง€๋งŒ checkd ํ”„๋กœํผํ‹ฐ ๊ฐ’์€ ๋ถˆ๋ฆฌ์–ธํƒ€์ž…)

39.7.4 data ์–ดํŠธ๋ฆฌ๋ทฐํŠธ dataset ํ”„๋กœํผํ‹ฐ


data ์–ดํŠธ๋ฆฌ๋ทฐํŠธ dataset ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTML ์š”์†Œ์— ์ •์˜ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. data ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” 'data-user-id', 'data-role'๊ณผ ๊ฐ™์ด data- ์ ‘๋‘์‚ฌ ๋‹ค์Œ์— ์ž„์˜์˜ ์ด๋ฆ„์„ ๋ถ™์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. dataset ํ”„๋กœํผํ‹ฐ์— ์ถ”๊ฐ€ํ•œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋Š” ์นด๋ฉœ ์ผ€์ด์Šค๋กœ ๋˜์–ด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์นด๋ฉœ์ผ€์ด์Šค๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
('data-user-id' -> userId)

[์˜ˆ์ œ39-83]
<html>
<body>
  <ul class="users">
    <li id="1" data-user-id="7621" data-role="admin">lee</li>
    <li id="2" data-user-id="9524" data-role="subscriber">kim</li>
  </ul>
  <script>
    const users = [...document.querySelector('.users').children];
    
    // user-id๊ฐ€ '7621'์ธ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ทจ๋“ํ•œ๋‹ค.
    const user = users.find(user => user.dataset.userId === '7621');
    // user-id๊ฐ€ '7621'์ธ ์š”์†Œ ๋…ธ๋“œ์—์„œ data-role์˜ ๊ฐ’์„ ์ทจ๋“ํ•œ๋‹ค.
    console.log(user.dataset.role); // "admin"
    
    // user-id๊ฐ€ '7621'์ธ ์š”์†Œ ๋…ธ๋“œ์— data-role์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
    user.dataset.role = "subscriber";
    console.log(user.dataset.role); // "subscriber"
  </script>
</body>
</html>

39.8 ์Šคํƒ€์ผ


<html>
<body>
  <ul class="users">
    <li id="1" data-user-id="7621" data-role="admin">lee</li>
    <li id="2" data-user-id="9524" data-role="subscriber">kim</li>
  </ul>
  <script>
    const users = [...document.querySelector('.users').children];
    users[0].style.color = 'blue';
    users[0].style['border-color'] = 'blue';
    users[1].style['border'] = '1px solid';
    users[1].style.borderColor = 'green';
  </script>
</body>
</html>  
  • css ํ”„๋กœํผํ‹ฐ๋Š” ์ผ€๋ฐฅ ์ผ€์ด์Šค๋ฅผ ๋”ฐ๋ฅธ๋‹ค ['background-color']
  • ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ๋Š” ์นด๋ฉœ์ผ€์ด์Šค backgroundColor
  • css ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ๋‹จ์œ„๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ ์šฉ์ด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

39.8.2 ํด๋ž˜์Šค ์กฐ์ž‘


className ํ”„๋กœํผํ‹ฐ๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฃจ๊ธฐ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. class Name ๋ณด๋‹ค classList ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • DOMTokenList ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ
    • add - ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•  1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์„ class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

    • remove - ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•  1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์—์„œ ์‚ญ์ œํ•œ๋‹ค ์—†์œผ๋ฉด ์—๋Ÿฌ ์—†์ด ๋ฌด์‹œ๋œ๋‹ค.

    • item - ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ index์— ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์—์„œ ๋ฐ˜ํ™˜ํ•˜๊ณ  index๊ฐ€ 1์ด๋ฉด ๋‘ ๋ฒˆ์งธ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    • contains(className) - ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

    • replace(className) - class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด์„ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

    • toggle(className) - class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด๊ณผ ์ผ์ฐจํ•˜๋Š” ํด๋ž˜์Šค ์กด์žฌํ•˜๋ฉด ์ œ๊ฑฐํ•˜๊ณ , ์—†์œผ๋ฉด ์ถ”๊ฐ€ํ•œ๋‹ค.