๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(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>
๋ฐ๋ก ์ด๋ ๊ฒ ์์ ์ด ๋๋ค.
์ ๋ง ๊ฐ๋จํ๊ณ ๊ฐํธํ๊ฒ ๋ ธ๋๋ฅผ ์์ ํ ์ ์์ง๋ง, ์ค์ ์๋น์ค์ ์ด๋ฐ ๋ก์ง์ ๊ตฌํํ๊ฒ ๋๋ฉด ๋ณด์ ์ด์๊ฐ ์๊ธธ ์ ์๋ ์น๋ช ์ ์ธ ๋จ์ ์ด ์๋ค.
'๐ Study > JS, JQuery' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Chap1 start _ require() ๋ฉ์๋ (0) | 2022.05.07 |
---|---|
๋๊ธฐ๋ฐฉ์ vs ๋น๋๊ธฐ๋ฐฉ์, ์ฝ๋ฐฑํจ์์ Promise ๊น์ง ํ๋ฒ์ ํ์ด๋ณด๊ธฐ! (0) | 2022.05.04 |
[JavaScript] ์๋ฐ์คํฌ๋ฆฝํธ DOM (Document Obejct Model) ๊ฐ๋ณ๊ฒ ์ดํดํ๊ธฐ - 1 (0) | 2022.03.13 |
[๋์ฝ]# 8 WEATHER (0) | 2022.03.02 |
[๋์ฝ] # 7 TO DO LIST (0) | 2022.03.02 |