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
๐ 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 ํธ๋ฆฌ ๋ผ๋ ์ฉ์ด๋ ์ต์ํด์ง๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋๋ ์์ง ๋ง๋ก ์ค๋ช ํด๋ณด๋ ค๊ณ ํ๋ ๋์ ์ธ์ด๋ก ์ค๋ช ํ๊ธฐ๋ ์ด๋ ค์ด๊ฒ ํ์คํ ์๋๊ฑด ์๋๊ฐ ๋ณด๋ค. ์ด๋ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ๊ฐ๋ ๊ณผ ์ฉ์ด๋ฅผ ๋ฐฐ์ฐ๋ฉด์๋ ๋จธ๋ฆฌ๋ก๋ ์ดํด๋ฅผ ํ๋๋ฐ ๋ง๋ก ์ค๋ช ํ์๋ ๋ช ํํ๊ฒ ์ค๋ช ํ์ง ๋ชปํ๋ ๋ถ๋ถ์ด ๋ง๋ค๋ ๊ฒ์ ๋๊ผ๋ค. ๋ ์ด์ฌํ ๊ณต๋ถํด์ผ๊ฒ ๋ค ๐ซ