๐Ÿ“… TIL #24

DOM ์ •๋ฆฌ

๐Ÿ‘‰ What is the DOM?


dom


DOM์€ Document Object Model์˜ ์•ฝ์ž๋กœ, HTML(Document)์— ์ ‘๊ทผํ•˜์—ฌ Object(JavaScript Object)์ฒ˜๋Ÿผ HTML์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” Model์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ฆ‰, ์›น ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ  ๋ฐ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ€์ผ์„ ์ฝ๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Document ๊ฐ์ฒด


document ๊ฐ์ฒด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›น์‚ฌ์ดํŠธ์— ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ํ”„๋กœํผํ‹ฐ(properties) ์™€ ๋ฉ”์†Œ๋“œ(methods)๋ฅผ ๊ฐ€์ง„ ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค.

์ฆ‰, document ๋Š” ํŽ˜์ด์ง€์˜ URL์„ ์–ป๊ฑฐ๋‚˜ ๋ฌธ์„œ์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ „์—ญ์ ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท, 2021-02-03 20-01-56

DOM์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์•„๋‹ˆ์ง€๋งŒ DOM์ด ์—†๋‹ค๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋Š” ์›น ํŽ˜์ด์ง€ ๋˜๋Š” XML ํŽ˜์ด์ง€ ๋ฐ ์š”์†Œ๋“ค๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋ธ์ด๋‚˜ ๊ฐœ๋…๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ  (the page content)๋Š” DOM์— ์ €์žฅ๋˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

API (web or XML page) = DOM + JS

DOM์„ ์–ด๋–ป๊ฒŒ ์ž‘์—…ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ํ•„์ˆ˜์ ์ด๋‹ค.

DOM์ด ์•„๋‹Œ ๊ฒƒ


1. DOM์€ HTML์ด ์•„๋‹ˆ๋‹ค.

DOM์€ HTML ๋ฌธ์„œ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜์ง€๋งŒ ํ•ญ์ƒ ๋™์ผํ•˜์ง€ ์•Š๋‹ค.

2. DOM์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๋ทฐ ํฌํŠธ์— ๋ณด์ด๋Š” ๊ฒƒ์€ ๋ Œ๋” ํŠธ๋ฆฌ๋กœ DOM๊ณผ CSSOM์˜ ์กฐํ•ฉ์ด๋‹ค. ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ์˜ค์ง ์Šคํฌ๋ฆฐ์—

๊ทธ๋ ค์ง€๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด DOM๊ณผ ๋‹ค๋ฅด๋‹ค.

์ฆ‰, ๋ Œ๋”๋ง ๋˜๋Š” ์š”์†Œ๋งŒ์ด ๊ด€๋ จ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์ด์ง€ ์•Š๋Š” ์š”์†Œ๋Š” ์ œ์™ธ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, display: none ์Šคํƒ€์ผ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์š”์†Œ์ด๋‹ค.

  • DOM ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ˆ˜์ •๋  ์ˆ˜ ์žˆ๋Š” ๋™์  ๋ชจ๋ธ์ด์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ‘‰ DOM๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฐจ์ด

DOM ์€ XML์ด๋‚˜ HTML ๋ฌธ์„œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ๋ฌธ์„œ ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ??

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ด๋Ÿฌํ•œ ๊ฐ์ฒด ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ƒˆ๋กœ์šด HTML ์š”์†Œ๋‚˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์กด์žฌํ•˜๋Š” HTML ์š”์†Œ๋‚˜ ์†์„ฑ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” HTML ๋ฌธ์„œ์˜ ๋ชจ๋“  HTML ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” HTML ๋ฌธ์„œ์˜ ๋ชจ๋“  HTML ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” HTML ๋ฌธ์„œ์˜ ๋ชจ๋“  CSS ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” HTML ๋ฌธ์„œ์— ์ƒˆ๋กœ์šด HTML ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” HTML ๋ฌธ์„œ์˜ ๋ชจ๋“  HTML ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.



๐Ÿ‘‰ ์ž์‹ํƒœ๊ทธ ์ฐพ๊ธฐ


  • .getElementBy ~(๋ณตํ•ฉ๊ตฌ์กฐ) : ๋ณตํ•ฉ๊ตฌ์กฐ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ๋งŒ ์ฐพ๋Š”๋‹ค.
  • .childNode : text๋„ ๊ฐ™์ด ์ฐพ๋Š”๋‹ค.
  • .children : ์ข…๋ฅ˜ ์ƒ๊ด€ ์—†์ด ๋ชจ๋“  ํƒœ๊ทธ๋ฅผ ์ฐพ๋Š”๋‹ค.

์Šคํฌ๋ฆฐ์ƒท, 2021-02-03 20-56-57


๐Ÿ‘‰ ๋ถ€๋ชจํƒœ๊ทธ ์ฐพ๊ธฐ


  • .parentElement : ํƒœ๊ทธ๋งŒ ์ฐพ๋Š”๋‹ค.
  • .parentNode : ๋นˆ๊ณต๊ฐ„ โ€ฆ ๋“ฑ ํฌํ•จ

์Šคํฌ๋ฆฐ์ƒท, 2021-02-03 21-13-57


๐Ÿ‘‰ DocumentFragment

//Syntax
document.createDocumentFragment();


DocumentFragment ๋Š” ๋นˆ DocumentFragment ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

DocumentFragment ํƒ€์ž…์€ ๋งˆํฌ์—…์— ํ‘œํ˜„๋˜์ง€ ์•Š๋Š” ์œ ์ผํ•œ ๋…ธ๋“œ ํƒ€์ž…์ด๋‹ค. DocumentFragment ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด

๋ผ์ด๋ธŒ DOM ํŠธ๋ฆฌ ์™ธ๋ถ€์— ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋ฌธ์„œ DOM์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋งŒ ์กด์žฌํ•˜๋Š” ๋นˆ ๋ฌธ์„œ ํ…œํ”Œ๋ฆฟ๊ฐ™์€

DocumentFragment์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์†์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•œ ํ›„, ๋ผ์ด๋ธŒ DOM์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํŠน์ง•

  • nodeType์€ 11์ด๋‹ค.
  • nodeName์€ โ€˜#document-fragmentโ€™
  • nodeValue๋Š” null์ด๋‹ค.
  • parentNode๋Š” null์ด๋‹ค.
  • ์ž์‹ ๋…ธ๋“œ๋กœ Element, Comment, Text๋“ฑ๋“ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.


const div = document.createElement("div");
const text = document.createTextNode("ํ…์ŠคํŠธ");
const fragment = document.creatDocumentFragment();

div.appendChild(text);
fragment.appendChild(div);
document.body.appendChild(fragment);

div์— text๋ฅผ ๋‹ด๊ณ , ๊ทธ๊ฒƒ์„ fragment์— ๋‹ด์€ ํ›„ ์ตœ์ข…์ ์œผ๋กœ body์—๋Š” fragment๋ฅผ ๋‹ด์•˜๋‹ค. ์ง์ ‘์ ์œผ๋กœ body์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฒƒ์€ fragment๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ, ๋‹จ ํ•œ ๋ฒˆ ์žˆ์—ˆ๋‹ค.

๋งŒ์•ฝ appendChild ๋ฅผ ๋งŽ์ด ์กฐ์ž‘ํ•ด์•ผํ•  ๊ฒฝ์šฐ, fragment์— ๋‹ด๊ณ  ๋งˆ์ง€๋ง‰์— fragment๋ฅผ body์— append ํ•ด์ค€๋‹ค.



๐Ÿ‘‰ insertBefore()

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋ถ€๋ชจ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด appendChild()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ถ€๋ชจ์˜ ์ฒซ๋ฒˆ์งธ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ??

insertBefore() ์™€ firstChild๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

  • Syntax ๋ถ€๋ชจ๋…ธ๋“œ.insertBefore(์‚ฝ์ž… ํ•  ๋…ธ๋“œ, ๊ธฐ์ค€ ์  ๋…ธ๋“œ)
//html
<ul class="parent">
  <li class="newEl">์š”์†Œ</li>
  <li class="El">button</li>
  <li class="El">button</li>
  <li class="El">button</li>
</ul>;

//js
let El = document.querySelector(".newEl");
let parent = document.querySelector(".parent");

parent.insertBefore(El, null); //๋งจ ๋์— ์‚ฝ์ž…
parent.insertBefore(El, parent.firstChild); //๋งจ ์•ž์— ์‚ฝ์ž…



๐Ÿ‘‰ template ์š”์†Œ

HTML template ์š”์†Œ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ์ˆœ๊ฐ„ ์ฆ‰์‹œ ํ™”๋ฉด์— ๋‚˜์˜ค์ง€๋Š” ์•Š์ง€๋งŒ, ์ดํ›„ Javascript๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” HTML ์ฝ”๋“œ์ด๋‹ค.

์ฆ‰, template ์š”์†Œ ๋‚ด์˜ ์ฝ˜ํ…์ธ ๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ์ฆ‰์‹œ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ ๋‚˜์ค‘์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•ด๋‹น ์ฝ˜ํ…์ธ ๋ฅผ ๋ณต์ œํ•œ ํ›„ ๋ณด์ด๋„๋ก ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ์ œ
//html
<template>
    <h3>์ฝ”๋“œ์Šคํ…Œ์ด์ธ </h3>
    <img src="/examples/images/img_codestates.png" alt="์ฝ”๋“œ์Šคํ…Œ์ด์ธ ">
</template>

//js
const t = document.querySelector("template");



๐Ÿ‘‰ element ์™€ node์˜ ์ฐจ์ด

nodes: DOM API์ƒ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค. ๊ทธ๊ฒƒ๋“ค์„ ๋ชจ๋‘ ํฌ๊ด„ํ•˜๋Š” ์ด๋ฆ„์ด node์ด๋‹ค.

Node์˜ ๋ฐ‘์— Element๊ฐ€ ์žˆ๊ณ 

element: one specific type of node. ์˜ˆ๋ฅผ ๋“ค์–ด div, body, window ๊ฐ™์€ ํŠน์ •ํ•œ ํƒ€์ž….

๋ชจ๋“  element๋Š” HTMLElement์˜ ์ž์‹์ด๋‹ค. ๋”ฐ๋ผ์„œ, HTMLElement์˜ property๋ฅผ ๋˜‘๊ฐ™์ด ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋™์‹œ์—, element์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ์„œ ์ž์‹ ๋งŒ์˜ property๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.



๐Ÿ‘‰ remove() ์™€ removeChild()์˜ ์ฐจ์ด

  • remove()

๋”ฐ๋กœ ๋ถ€๋ชจ ์š”์†Œ๊ฐ€ ํ•„์š”์—†์Œ. remove()๋Š” ๋…ธ๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

  • removeChild ()

๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์— ํ•ด๋‹น ๋…ธ๋“œ๋Š” ๊ทธ๋Œ€๋กœ ์กด์žฌํ•˜๋ฉฐ, ๋ถ€๋ชจ ๋…ธ๋“œ์™€์˜ ๋ถ€๋ชจ-์ž์‹๊ด€๊ณ„๋ฅผ ๋Š์–ด DOM ํŠธ๋ฆฌ์—์„œ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ตœ์ข…์ ์œผ๋กœ๋Š” ๊ด€๊ณ„๋ฅผ ๋Š์€ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œํ•˜๋Š” ๋…ธ๋“œ์˜ ์ฐธ์กฐ๊ฐ€ ๋”์ด์ƒ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ GC(Garbage Collection)์— ์˜ํ•ด ์ž ์‹œ ํ›„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œ๋œ๋‹ค.

๋ฐ˜ํ™˜๋œ ๋…ธ๋“œ ์ฐธ์กฐ๋ฅผ ๋ณ€์ˆ˜์— ๋‹ด์•„ ๋‹ค๋ฅธ DOM ์œ„์น˜์— ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ์˜ˆ์‹œ
let id = document.querySelector("#id");
let rm = id.parentNode.removeChild(id);
document.body.prepend(rm);

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ญ์ œํ•œ ๋…ธ๋“œ์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋ถ™์—ฌ์„œ ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ ์ด๋™ํ•˜๋Š” ์ž‘์—…์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ์‚ญ์ œํ•˜๋Š” ๋…ธ๋“œ ํ•˜์œ„์— ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ๋“ค๋„ ๋ชจ๋‘ ์‚ญ์ œ๋œ๋‹ค.

๋…ธ๋“œ๋“ค์€ ๋ถ€๋ชจ/์ž์‹ ๊ด€๊ณ„๋กœ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด, ์ž์‹ ๋…ธ๋“œ๋„ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค.



๐Ÿ‘‰ prepend()

.prepend()๋Š” ์„ ํƒํ•œ ์š”์†Œ์˜ ๋‚ด์šฉ์˜ ์•ž์— ์ฝ˜ํ…ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • Syntax $(target).prepend(source)

  • ์˜ˆ์‹œ


<ol id="list">
  <li>์ฒซ ๋ฒˆ์งธ ์•„์ดํ…œ</li>
  <li>๋‘ ๋ฒˆ์งธ ์•„์ดํ…œ</li>
</ol>

$(#"list").prepend("<li>์ƒˆ๋กœ ์ถ”๊ฐ€ ๋œ ์•„์ดํ…œ</li>")

//after

<ol id="list">
  <li>์ƒˆ๋กœ ์ถ”๊ฐ€ ๋œ ์•„์ดํ…œ</li>
  <li>์ฒซ ๋ฒˆ์งธ ์•„์ดํ…œ</li>
  <li>๋‘ ๋ฒˆ์งธ ์•„์ดํ…œ</li>
</ol>

NodeList ์™€ ์œ ์‚ฌ๋ฐฐ์—ด

NodeList๋ž€?

element.childNodes ํ”„๋กœํผํ‹ฐ๋‚˜ document.querySelectorAll ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๋…ธ๋“œ์˜ ๋ชจ์Œ์ด๋‹ค.

NodeList๋„ ์œ ์‚ฌ ๋ฐฐ์—ด์ธ๋ฐ, forEach ๋ฉ”์„œ๋“œ๋Š” ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ map, filter,reduce ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค.


NodeList ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜


๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ์–ด์ค„ ์ˆ˜ ์žˆ์„๊นŒ?? ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์ดํ•ด๋ฅผ ํ•ด๋ณด์ž.


const div = document.querySelectorAll("div");
const array = Array.prototype.slice.call(div);

//๋˜๋Š”
const nodelist = document.querySelectorAll(".divy");
const divyArray = Array.from(nodelist);

//๋˜๋Š”
const divyArray = [...document.querySelectorAll(".divy")];


์ด๋Ÿฐ์‹์œผ๋กœ nodelist๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋ฉด forEach() ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ฐฐ์—ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!!



๐Ÿ‘Š ๋‚ด์ผ์˜ TIW(today I Will)

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ํŠธ์œ„ํ‹€๋Ÿฌ ํ•จ์ˆ˜