๐Ÿฅ… DOM ์กฐ์ž‘ ๋ฐฉ๋ฒ•

8181 ๋‹จ์–ด DOMhtmlDOM

๐Ÿฅ…ย DOM (๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ : Document Object Model) ์ด๋ž€?

HTML, XML ๋ฌธ์„œ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ, HTML ์š”์†Œ๋ฅผ object์ฒ˜๋Ÿผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” model์ž…๋‹ˆ๋‹ค.

ํŠน์ง•

  • HTML์„ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ด๊ณ , ์ƒˆ๋กœ์šด element๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์„œ์˜ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์—ฌ ๋ฌธ์„œ ๊ตฌ์กฐ, ์Šคํƒ€์ผ, ๋‚ด์šฉ ๋“ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š”๋‹ค.

๐Ÿฅ…ย Achievement Goals

document ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ HTML ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , CRUD ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ•ด๋ณด์ž.

  1. CREATE : createElement
  2. READ : querySelector, querySelectorAll
  3. UPDATE : textContent, id, classList, setAtrribute
  4. DELETE : remove, removeChild, innerHTML, textContent
  5. 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);
}

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ