Jieunny์˜ ๋ธ”๋กœ๊ทธ

Unit 10. [JS/๋ธŒ๋ผ์šฐ์ €] DOM ๊ธฐ์ดˆ ๋ณธ๋ฌธ

CodeStates/learning contents

Unit 10. [JS/๋ธŒ๋ผ์šฐ์ €] DOM ๊ธฐ์ดˆ

Jieunny 2022. 12. 26. 14:28

๐Ÿ“ฃ 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์ธ ์š”์†Œ๋งŒ ์ฐพ์•„์„œ ์ œ๊ฑฐํ•œ๋‹ค.