๐ฅ DOM ์กฐ์ ๋ฐฉ๋ฒ
๐ฅ ย DOM (๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ : Document Object Model) ์ด๋?
HTML, XML ๋ฌธ์์ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ก, HTML ์์๋ฅผ object์ฒ๋ผ ์กฐ์ํ ์ ์๋ model์ ๋๋ค.
ํน์ง
- HTML์ ์กฐ์ํ๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ๊ธฐ์ด์ ์ด๊ณ , ์๋ก์ด element๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
- ๋ฌธ์์ ๊ตฌ์กฐํ๋ ํํ์ ์ ๊ณตํ๋ค.
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ DOM ๊ตฌ์กฐ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๋ฌธ์ ๊ตฌ์กฐ, ์คํ์ผ, ๋ด์ฉ ๋ฑ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋๋ค.
๐ฅ ย Achievement Goals
document ๊ฐ์ฒด๋ฅผ ํตํด์ HTML ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค๊ณ , CRUD ๋ฐฉ๋ฒ์ ๊ณต๋ถํด๋ณด์.
- CREATE : createElement
- READ : querySelector, querySelectorAll
- UPDATE : textContent, id, classList, setAtrribute
- DELETE : remove, removeChild, innerHTML, textContent
- APPEND : appendChild
CREATE
element๋ฅผ ์์ฑํฉ๋๋ค.
/* 1 */
// div element ์์ฑ
document.createElement('div')
// ๋ณ์ ํ ๋น
const tweetDiv = document.createElement('div')
APPEND
element๋ฅผ ์ ์ฉํฉ๋๋ค.
/* 2 */
// ๋ณ์ ํ ๋น
const tweetDiv = document.createElement('div')
// ๋ณ์๋ฅผ body์ ๋ฃ์ด DOM ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ฐ๊ฒฐ
document.body.append(tweetDiv)
READ
element๋ฅผ ์กฐํํฉ๋๋ค.
์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํด์๋ querySelector์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ(์ ๋ ํฐ)๋ฅผ ์ ๋ฌํ์ฌ ํ์ธ ํ ์ ์์ต๋๋ค.
์ ๋ ํฐ๋ก HTML ํ๊ทธ, id ๊ฐ, class ๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
// className์ด tweet์ธ HTML element ์ค ์ฒซ ๋ฒ์งธ๋ฅผ ์กฐํ
const oneTweet = document.querySelector('.tweet')
// ๋ชจ๋ '.tweet'์ธ HTML element๋ฅผ ์กฐํ
const tweets = document.querySelectorAll('.tweet')
/* 3 */
const container = document.querySelector('#container')
const tweetDiv = document.createElement('div')
// className์ด container์ ๋งจ ๋ง์ง๋ง ์์ element๋ก tweetDiv๋ฅผ ์ถ๊ฐ
container.append(tweetDiv)
UPDATE
element๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
// ๋ง๋ค๊ณ ์ถ์ element ์์ฑ
const tweetDiv = createElement('div')
console.log(tweetDiv) //<div></div>
// element์ text ์ฝ์
tweetDiv.textContent = "๊นํฌ์ฐ"
console.log(tweetDiv) //<div>๊นํฌ์ฐ</div>
// element์ CSS ์ฝ์
tweetDiv.classList.add('tweet')
console.log(tweetDiv) //<div class="tweet">๊นํฌ์ฐ</div>
// element container ์์ ๋ฐฐ์น
const container = document.querySelector('#container')
container.append(tweetDiv)
DELETE
element๋ฅผ ์ญ์ ํฉ๋๋ค.
innerHTML
: ๋ชจ๋ element๋ฅผ ์ญ์ ํ ์ ์์ง๋ง, ๋ณด์์์ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค.
removeChild
: innerHTML์ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฉ์๋, ์์ element๋ฅผ ์ง์ ํด์ ์ญ์ ํ๋ค.
/* 3 */
tweetDiv.remove()
// ๋ชจ๋ element ์ญ์ : innerHTML
document.querySelector('#container').innerHTML = '';
// ์ง์ element ์ญ์ : removeChild
const container = document.querySelector('#container');
while (container.firstChild) {
container.removeChild(container.firstChild);
}
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฅ DOM ์กฐ์ ๋ฐฉ๋ฒ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@heeeee0818/DOM-์กฐ์-๋ฐฉ๋ฒ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค