๐Ÿ“š Study/JS, JQuery

[JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ DOM (Document Obejct Model) ๊ฐ€๋ณ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ - 2

kkh1902 2022. 3. 13. 18:59
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(The Document Object Model)์€ ์›นํŽ˜์ด์ง€๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์›นํŽ˜์ด์ง€๋ฅผ ๊ฐ์ฒดํšŒ ํ•œ ๊ฐœ๋…์ด๊ณ ,

์›น ํŽ˜์ด์ง€๋ฅผ ๊ฐ์ฒดํ™”ํ•œ ๊ฐ ์š”์†Œ์š”์†Œ๋“ค์„ Node๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ๋…ธ๋“œ๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ์ƒ์œ„ ๋…ธ๋“œ๊ฐ€ document ๊ฐ์ฒด์˜€๋‹ค.

 

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

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์‹ค์ œ๋กœ ์›น ํŽ˜์ด์ง€์˜ HTML์„ ์ž์œ ๋กญ๊ฒŒ ๋‹ค๋ฃจ๋Š” ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

๋…ธ๋“œ ์ƒ์„ฑํ•˜๊ธฐ

1. Html tag ๋…ธ๋“œ ์ƒ์„ฑํ•˜๊ธฐ (createElement ๋ฉ”์„œ๋“œ)

// document.createElement(tagName);
const divElement = document.createElement('div');

document๋ฌธ์„œ์˜ createElement(tagName) ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ํƒœ๊ทธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. Text ๋…ธ๋“œ ์ƒ์„ฑํ•˜๊ธฐ (createTextNode ๋ฉ”์„œ๋“œ)

// document.createTextNode(text)
const textNode = document.createTextNode('Hello');

document๋ฌธ์„œ์˜ createTextNode(text) ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๊ณผ ๊ฐ™์ด text ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

text๋…ธ๋“œ๋ผ๊ณ  ํ•˜๋ฉด, ๋ง๊ทธ๋Œ€๋กœ ๋ฌธ์ž๋ฅผ ๋งํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์•„๋ž˜์™€ ๊ฐ™์€ HTML ํƒœ๊ทธ๊ฐ€ ์žˆ๋‹ค๋ฉด, 

<div>
  Hello
</div>

divํƒœ๊ทธ๋Š” ํƒœ๊ทธ ๋…ธ๋“œ, Hello๋Š” Text๋…ธ๋“œ์— ํ•ด๋‹น๋œ๋‹ค.

 

๋…ธ๋“œ ๋‹ค๋ฃจ๊ธฐ (์‚ฝ์ž…, ์‚ญ์ œ)

 

1. ๋…ธ๋“œ ์‚ฝ์ž…ํ•˜๊ธฐ (appendChild ๋ฉ”์„œ๋“œ)

[์ถ”๊ฐ€ํ•  ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋…ธ๋“œ].appendChild([์ถ”๊ฐ€ํ•  ๋…ธ๋“œ])

์œ„์™€ ๊ฐ™์€ ๋ชจ์–‘์œผ๋กœ appendChild๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋…ธ๋“œ ์•ˆ์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, ๋ฉ”์„œ๋“œ ์ด๋ฆ„์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ, ์ž์‹ ๋…ธ๋“œ๋กœ ์‚ฝ์ž…์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์—

์ถ”๊ฐ€ํ•  ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์— ๋จผ์ € ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

let newH1 = document.createElement('h1');
let newTitle = document.createTextNode('Hi!?');

newH1.appendChild(newTitle);

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ์ผ๋‹จ <h1>์ด๋ผ๋Š” ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ  ๊ทธ ์•ˆ์— 'Hi!?'๋ผ๋Š” ๋ฌธ์ž๋ฅผ ์‚ฝ์ž…ํ•ด ์ค€ ์ฝ”๋“œ๋‹ค.

๊ทธ๋ž˜์„œ ์ง€๊ธˆ newH1 ๋ณ€์ˆ˜์—๋Š” 

<h1>Hi!?</h1>

์œ„์™€ ๊ฐ™์€ ๋…ธ๋“œ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ž, ๊ทธ๋Ÿฐ๋ฐ ์•„์ง ์ด ๋…ธ๋“œ๋Š” ๋ฐ”๋กœ ์›นํŽ˜์ด์ง€์— ๋ฐ˜์˜๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ€์ƒ์˜ ๊ณต๊ฐ„์— ์ƒ์„ฑ๋˜๊ธฐ๋งŒ ํ•œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ์— ์ ‘๊ทผํ•ด์„œ ์ƒ์„ฑํ•œ ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ ๋” ์‚ฝ์ž…ํ•ด ์ฃผ์–ด์•ผ ์›นํŽ˜์ด์ง€์— ๋ฐ˜์˜๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์€ HTML ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

<div id="container">
  <h1 id="title">Hello</h1>
</div>

์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋˜์–ด์žˆ๋Š” ์ƒํ™ฉ์—์„œ

let container = document.getElementById('container');

let newH1 = document.createElement('h1');
let newTitle = document.createTextNode('Hi!?');

newH1.appendChild(newTitle);
container.appendChild(newH1);

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด,

<div id="container">
  <h1 id="title">Hello</h1>
  <h1>Hi!?</h1>
</div>

์ด๋Ÿฐ ๊ฒฐ๊ณผ๋กœ ์ด์–ด์ง„๋‹ค.

์ด๋ ‡๊ฒŒ appendChild๋ฅผ ์ด์šฉํ•ด ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด, ์ ‘๊ทผํ•œ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

2. ๋…ธ๋“œ ์‚ญ์ œํ•˜๊ธฐ (removeChild ๋ฉ”์„œ๋“œ)

์œ„ ์ฝ”๋“œ์— ์ด์–ด์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด, removeChild ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

[์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋…ธ๋“œ].removeChild(์‚ญ์ œํ•  ๋…ธ๋“œ)

์ด ๋ฉ”์„œ๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋จผ์ € ๋ถ€๋ชจ ๋…ธ๋“œ์— ์ ‘๊ทผํ•ด์„œ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค.

์•ž์„  ์ฝ”๋“œ์—์„œ title์ด๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ h1ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

let container = document.getElementById('container');

let newH1 = document.createElement('h1');
let newTitle = document.createTextNode('Hi!?');

newH1.appendChild(newTitle);
container.appendChild(newH1);

let oldTitle = document.getElementById('title');
container.removeChild(oldTitle);

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด title์ด๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ h1 ํƒœ๊ทธ๋Š” ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

<div id="container">
  <h1>Hi!?</h1>
</div>

์ด๋ ‡๊ฒŒ ์‚ญ์ œ์™€ ์‚ฝ์ž…์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ํƒœ๊ทธ์˜ ๋‚ด์šฉ์„ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

 

ํ•˜์ง€๋งŒ, ์ดˆ ๊ฐ„๋‹จ ๋งˆ๋ฒ•..! innerHTML!

ํ•˜์ง€๋งŒ, ๋ญ”๊ฐ€ createElement, createTextNode, appendChild, removeChild.. ๋ญ”๊ฐ€ ๊ฐ„๋‹จํ•œ DOM์„ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•ด๋„ ๋„ˆ๋ฌด ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์‹ฌ์ง€์–ด ๋ณต์žกํ•˜๊ธฐ๋„ ํ•˜๋‹ค.

์‚ฌ์‹ค ๋…ธ๋“œ์—๋Š” innerHTML์ด๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๋ง ๊ทธ๋Œ€๋กœ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋‚ด๋ถ€ HTML์„ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ• ๋‹น ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด HTML ํƒœ๊ทธ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ํ• ๋‹นํ•˜๋ฉด

์•ž์—์„œ ์—ด์‹ฌํžˆ ํƒœ๊ทธ๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋…ธ๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผ ๋  ๋ถ€๋ถ„์€ ๋‹น์—ฐํžˆ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์žฌํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—

HTML ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ, ๋Œ€์ฒดํ•ด๋ฒ„๋ฆฐ๋‹ค๋Š” ์ ์ด๋‹ค.

์•ž์—์„œ ์—ด์‹ฌํžˆ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ innerHTML๋กœ ๋ฐ”๊ฟ”๋ณด๋ฉด,

<div id="container">
  <h1 id="title">Hello</h1>
</div>

์ด๋Ÿฐ HTML ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๋•Œ,

let container = document.getElementById('container');

container.innerHTML = '<h1>Hi!?</h1>';

์ด๋ ‡๊ฒŒ๋งŒ ํ•ด์ฃผ๋ฉด

<div id="container">
  <h1>Hi!?</h1>
</div>

๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ ์ˆ˜์ •์ด ๋œ๋‹ค.

์ •๋ง ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ๋…ธ๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ ์„œ๋น„์Šค์— ์ด๋Ÿฐ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ๋ณด์•ˆ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์žˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•