Jieunny์ ๋ธ๋ก๊ทธ
Unit 10. [JS/๋ธ๋ผ์ฐ์ ] DOM ๊ธฐ์ด ๋ณธ๋ฌธ
๐ฃ DOM
Document Object Model
HTML ์์๋ฅผ Object์ฒ๋ผ ์กฐ์ํ ์ ์๋ Model์ด๋ค. -> JS๋ฅผ ์ฌ์ฉํ๋ฉด DOM์ผ๋ก HTML์ ์กฐ์ํ ์ ์๋ค.
HTML๋ก ๊ตฌ์ฑ๋ ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ง์ด๊ฒ ๋ง๋ค ์ ์๋ค!
๐ฃ HTML์ JS ์ ์ฉํ๊ธฐ
<script src="myScriptFile.js"></script>
์น ๋ธ๋ผ์ฐ์ ๋ ์ฝ๋ ํด์ ๊ณผ์ ์์ <script> ์์๋ฅผ ๋ง๋๋ฉด HTML ํด์์ ๋ฉ์ถ๊ณ <script> ์์๋ฅผ ๋จผ์ ์คํํ๋ค.
๐จ <script> ์์๋ ๋ฑ์ฅ๊ณผ ํจ๊ป ์คํ๋๋ค
โ๏ธ <script> ์์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
1๏ธโฃ <head> ์์ชฝ์ ์ฝ์
โฐ HTML ํ๊ทธ๋ฅผ ๋ง๋๊ธฐ ์ ์ <script>์์๊ฐ ์คํ๋์ HTMLํ๊ทธ๋ฅผ ์ ๋๋ก ๋ถ๋ฌ์ค์ง ๋ชปํ๋ค.
2๏ธโฃ <body> ์์ ๋๋๊ธฐ ์ ์ ์ฝ์
โ๏ธ HTML ๋ ์ด์์์ ์ปดํจํฐ์๊ฒ ์ ๋ฌํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ์์ DOM์ document ๊ฐ์ฒด์ ๊ตฌํ๋์ด ์๋ค.
console.dir ๋ก DOM ๊ตฌ์กฐ๋ฅผ ์กฐํํ๋ฉด ๊ฐ์ฒด์ ๋ชจ์ต์ผ๋ก ์ถ๋ ฅํ ์ ์๋ค.
์ ํํ ์์์ children ์์๋ฅผ ๋ณผ ์ ์๋ค.
๐ฃ DOM ๋ค๋ฃจ๊ธฐ
CRUD : CREATE, READ, UPDATE, DELETE
document ๊ฐ์ฒด๋ฅผ ํตํด์ HTML ์๋ฆฌ๋จผํธ๋ฅผ CRUD ํ๋ ๋ฐฉ๋ฒ
โ๏ธ CREATE
const tweetDiv = document.createElement('div')
// tweetDiv ์์๋ ํ์ฌ ๊ณต์ค๋ถ์ ์ค์ด๋ค.
// ๊ณต์ค์ ๋ ์๋ element๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ APPEND ํด์ผํ๋ค.
โ๏ธ APPEND
document.body.append(tweetDiv)
์์ฑํ tweetDiv๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ฐ๊ฒฐํ๋ค.
๋ณ์ tweetDiv์ ๋ด๊ธด ์๋ก์ด <div> ์์๋ฅผ <body> ์์์ append ํ๋ค.
โ๏ธ READ
const tweets = document.querySelectorAll('.tweet')
// ํด๋์ค ์ด๋ฆ์ด tweet์ธ ๋ชจ๋ HTML ์์๋ฅผ ์ ์ฌ ๋ฐฐ์ด๋ก ๋ฐ์์จ๋ค.
์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ querySelectorAll ์ ์ฌ์ฉํ๋ค.
ํ๋์ ์์๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ querySeletor ๋ฅผ ์ฌ์ฉํ๋ค.
๐จ ๋ฐฐ์ด์ด ์๋ Array-like Object(์ ์ฌ ๋ฐฐ์ด) ๋ก ๊ฐ์ ธ์จ๋ค.
๐จ document.getElementById ์ด๋ฐ ๋ฉ์๋๋ ์๋ ๋ฐฉ์
const container = document.querySeletor('#container');
const tweetDiv = document.createElement('div');
container.append(tweetDiv);
tweetDiv ๋ผ๋ <div> ์์๋ฅผ ์์ฑํด์ containter์ ๋ง์ง๋ง ์์ ์์๋ก ์ถ๊ฐํ๋ค.
โ๏ธ UPDATE
const oneDiv = document.createElement('div');
oneDiv.textContent = 'dev';
oneDiv.classList.add('tweet');
const container = document.querySelector('#container');
container.append(oneDiv);
textContent๋ฅผ ์ฌ์ฉํด์ ๋น์ด์๋ div ์๋ฆฌ๋จผํธ์ ๋ฌธ์์ด์ ์ ๋ ฅํ๋ค.
classList.add๋ฅผ ์ด์ฉํด์ <div> ์์์ 'tweet' ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ค.
container๋ฅผ ์ฐพ์์ ๋ง์ง๋ง ์์ ์์๋ก oneDiv๋ฅผ ์ถ๊ฐํ๋ค.
๐จ element.setAttribute('attributename', 'attributevalue') ๋ก class, id ์ธ์ ๋ค๋ฅธ ์์ฑ์ ์ถ๊ฐํ ์ ์๋ค.
โ๏ธ DELETE
1๏ธโฃ ์ญ์ ํ๋ ์์์ ์์น๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ
const container = document.querySelector('#container');
const tweetDiv = document.createElement('div');
container.append(tweetDiv);
tweetDiv.remove(); // appendํ ์์ ์ญ์ ํ๊ธฐ
2๏ธโฃ ์ฌ๋ฌ ๊ฐ์ ์์ ์์๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ
document.querySelector('#container').innerHTML = '';
id๊ฐ container์ธ ์์ ์๋์ ๋ชจ๋ ์์๋ฅผ ์ ๊ฑฐํ๋ค.
3๏ธโฃ ์์ ์์๋ฅผ ์ง์ ํด์ ์ญ์ ํ๋ ๊ฒฝ์ฐ
const container = document.querySelector('#container');
while (container.firstChild) {
container.removeChild(container.firstChild);
}
container์ ์ฒซ ๋ฒ์งธ ์์ ์์๊ฐ ์กด์ฌํ๋ฉด, ์ฒซ ๋ฒ์งธ ์์ ์์๋ฅผ ์ ๊ฑฐํ๋ค.
const container = document.querySelector('#container');
while (container.children.length > 1) {
container.removeChild(container.lastChild);
}
container์ ์์ ์์๊ฐ 1๊ฐ๋ง ๋จ์ ๋๊น์ง, ๋ง์ง๋ง ์์ ์์๋ฅผ ์ ๊ฑฐํ๋ค.
4๏ธโฃ ํน์ ํด๋์ค์ ์์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ
const tweets = document.querySelectorAll('.tweet')
tweets.forEach(function(tweet){
tweet.remove();
})
// or
for (let tweet of tweets){
tweet.remove();
}
ํด๋์ค ์ด๋ฆ์ด tweet์ธ ์์๋ง ์ฐพ์์ ์ ๊ฑฐํ๋ค.
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Unit 10. [JS/๋ธ๋ผ์ฐ์ ] ์ด๋ฒคํธ ๊ฐ์ฒด (0) | 2022.12.28 |
---|---|
Unit 10. [JS/DOM] ์ ํจ์ฑ ๊ฒ์ฌ (0) | 2022.12.27 |
Unit 9. [JS]ES6 ์ฃผ์๋ฌธ๋ฒ (0) | 2022.12.23 |
Unit 9. [JS]ํด๋ก์ (0) | 2022.12.23 |
Unit 9. [JS]์ค์ฝํ (0) | 2022.12.22 |