๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/๐Ÿฅ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE ๋ถ€ํŠธ์บ ํ”„

Section1 Unit10 JS/๋ธŒ๋ผ์šฐ์ € DOM

๋ฐ˜์‘ํ˜•

Section1 Unit10 [JS/๋ธŒ๋ผ์šฐ์ €] DOM

 

๐Ÿ“Œ Chapter1. DOM ๊ธฐ์ดˆ

DOM(Documnet Object Model)์€ HTML ์š”์†Œ๋ฅผ Object(JavaScript Object)์ฒ˜๋Ÿผ ์กฐ์ž‘(Manipulation)ํ•  ์ˆ˜ ์žˆ๋Š” Model์ด๋‹ค. ์ฆ‰, JavaScript๋ฅผ ์‚ฌ์šฉํ•ด DOM์œผ๋กœ HTML์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

• ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ๋Š”, ์–ด๋””์—์„œ๋‚˜ document ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

console.log(document.body);
console.dir(document.body);

→ DOM ๊ตฌ์กฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” DOM์„ ๊ฐ์ฒด์˜ ๋ชจ์Šต์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” console.dir๊ฐ€ ์œ ์šฉํ•˜๋‹ค.

 

 

Tree ๊ตฌ์กฐ์˜ DOM

 

์ถœ์ฒ˜ blog.10pines.com

 

๐Ÿ“Œ Chapter2. DOM ๋‹ค๋ฃจ๊ธฐ

CRUD(Create, Read, Update and Delete)

์–ด๋–ค ์ข…๋ฅ˜์˜ ๊ฐœ๋ฐœ์ด๋‚˜ ์ปดํ“จํ„ฐ ์–ธ์–ด๋ฅผ ๋ฐฐ์šฐ๋”๋ผ๋„ ๊ฐ€์žฅ ๋จผ์ € CRUD์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ํ•™์Šตํ•˜๋Š” ๋ฐฉ๋ฒ• ๐Ÿ‘๐Ÿป

 

CREATE

const tweetDiv = document.createElement("div")

 

READ

const oneTweet = document.querySelector('.tweet')
const tweets = document.querySelectorAll('.tweet')

→ querySelectorAll์€ ์œ ์‚ฌ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ HTML ์š”์†Œ๋“ค์„ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. (Array-like Object)

 

UPDATE

// textContent๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ž์—ด ์ž…๋ ฅ
oneDiv.textContent = 'dev'; // <div>dev</div>

// classList.add๋ฅผ ์ด์šฉํ•ด 'tweet' ํด๋ž˜์Šค ์ถ”๊ฐ€
oneDiv.classList.add('tweet') // <div class="tweet">dev</div>

// setAttribute๋ฅผ ์ด์šฉํ•ด ์†์„ฑ ์ถ”๊ฐ€
tweetDiv.setAttribute("name", "elem") // <div class="tweet" name="elem">hola</div>

 

DELETE

// ์‚ญ์ œํ•˜๋ ค๋Š” ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ
tweetDiv.remove()

// ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์‹ ์š”์†Œ๋ฅผ ์ง€์šฐ๋ ค๋Š” ๊ฒฝ์šฐ
document.querySelector('#container').innerHTML = '';

innerHTML์„ ์ด์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜์ง€๋งŒ, innerHTML์€ ๋ณด์•ˆ์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. innerHTML์„ ๋Œ€์‹ ํ•  ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

// container์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜๋ฉด, ์ฒซ ๋ฒˆ์งธ ์ž์‹ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
while (container.firstChild) {
  container.removeChild(container.firstChild);
}

removeChild๋Š” ์ž์‹ ์š”์†Œ๋ฅผ ์ง€์ •ํ•ด์„œ ์‚ญ์ œํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ˜๋ณต๋ฌธ(while, for, etc.)์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ Chapter3. ์ด๋ฒคํŠธ ๊ฐ์ฒด

function handleClick(event) {
  console.log(event);
}

์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ(onclick, onkeyup, onscroll ๋“ฑ)์„ ํŠธ๋ฆฌ๊ฑฐ๋กœ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด์ด๋‹ค.

 


๐ŸŒ™  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

 ๋“œ๋””์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ DOM์„ ๋‹ค๋ฃจ๋Š” ์ˆ˜์—…์— ๋“ค์–ด์™”๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ HTML ์š”์†Œ๋ฅผ ์กฐ์ž‘ํ•ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žฌ๋ฏธ์žˆ๊ณ , ๋งค๋ ฅ์ ์ธ ์ž‘์—…์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 ์ด์ „์—๋Š” DOM Tree, Tree ๊ตฌ์กฐ๋ผ๋Š” ๋ง์ด ์™€๋‹ฟ์ง€ ์•Š์•˜์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์˜ค๋Š˜ ์ˆ˜์—…์—์„œ๋„ ๊ทธ๋ ‡๊ณ  ๊ณผ์ • ์ดˆ๋ฐ˜์— HTML์„ ์ด์•ผ๊ธฐํ•  ๋•Œ์—๋„ Tree ๊ตฌ์กฐ๋ฅผ ์ ‘ํ–ˆ์—ˆ๋‹ค. ํŠธ๋ฆฌ๋Š” ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, DOM์—์„œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•˜์œ„ ๋…ธ๋“œ๋กœ ์ด์–ด์ง€๋Š” ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. HTML ์—์„œ๋Š” ๋ฌธ์„œ์˜ ์ตœ์ƒ์œ„ ์š”์†Œ์ธ <html> ์š”์†Œ๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋˜๊ณ , ์ด ๋…ธ๋“œ ์•„๋ž˜์—๋Š” <head>์™€ <body> ๋“ฑ์˜ ํ•˜์œ„ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๋ช‡ ๋ฒˆ ๋ณด๋‹ค๋ณด๋‹ˆ DOM ํŠธ๋ฆฌ ๋ผ๋Š” ์šฉ์–ด๋„ ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 ๊ทธ๋ž˜๋„ ์•„์ง ๋ง๋กœ ์„ค๋ช…ํ•ด๋ณด๋ ค๊ณ  ํ•˜๋‹ˆ ๋‚˜์˜ ์–ธ์–ด๋กœ ์„ค๋ช…ํ•˜๊ธฐ๋Š” ์–ด๋ ค์šด๊ฒŒ ํ™•์‹คํžˆ ์•„๋Š”๊ฑด ์•„๋‹Œ๊ฐ€ ๋ณด๋‹ค. ์ด๋ฒˆ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค์–‘ํ•œ ๊ฐœ๋…๊ณผ ์šฉ์–ด๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ๋„ ๋จธ๋ฆฌ๋กœ๋Š” ์ดํ•ด๋ฅผ ํ•˜๋Š”๋ฐ ๋ง๋กœ ์„ค๋ช…ํ•˜์ž๋‹ˆ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๋‹ค. ๋” ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค ๐Ÿซ 

๋ฐ˜์‘ํ˜•