Dream๐Ÿฐng
article thumbnail

 

DOM ๊ธฐ์ดˆ


DOM์ด๋ž€? Document Object Model์˜ ์•ฝ์ž๋กœ, HTML ์š”์†Œ๋ฅผ JavaScript ๊ฐ์ฒด์ฒ˜๋Ÿผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ์„ ๋งํ•œ๋‹ค.

 

โœ๏ธ HTML์— JavaScript ์ ์šฉํ•˜๊ธฐ

HTML์„ JavaScript์—์„œ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” HTML ๋ฌธ์„œ์™€ JavaScript ๋ฌธ์„œ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด ๋•Œ HTML ๋ฌธ์„œ ๋‚ด์— <script> ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ JavaScript๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๋Š” ๊ณผ์ •์—์„œ <script> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ํ•ด์„์„ ๋ฉˆ์ถ”๊ณ  <script> ํƒœ๊ทธ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•œ๋‹ค. <script> ํƒœ๊ทธ๋Š” ๋“ฑ์žฅ๊ณผ ํ•จ๊ป˜ ์‹คํ–‰๋œ๋‹ค.

<script> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด HTML ํ•ด์„์„ ์ค‘๋‹จํ•œ๋‹ค.

 

<script> ํƒœ๊ทธ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • <head> ํƒœ๊ทธ ์•ˆ์— ์ถ”๊ฐ€
<html>
  <head>
    <script src="javascript.js"></script>
  </head>
  <body>
    <h2>Hello JavaScript!</h2>
  </body>
</html>

<head> ํƒœ๊ทธ ์•ˆ์— <script> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, <body> ํƒœ๊ทธ ๋‚ด๋ถ€๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์ „ <script> ํƒœ๊ทธ๋ฅผ ๋จผ์ € ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— JavaScript์—์„œ <body> ํƒœ๊ทธ ๋‚ด๋ถ€์˜ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ ์ฝ์–ด๋“ค์ด์ง€ ๋ชปํ•œ๋‹ค.

<head> ํƒœ๊ทธ ์•ˆ์— <script> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์™„์ „ํ•œ ํ˜•ํƒœ๋กœ ๋ณด์ด์ง€๋งŒ js ํŒŒ์ผ ์šฉ๋Ÿ‰์ด ํฌ๊ณ  ์ธํ„ฐ๋„ท ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ณด๊ธฐ๊นŒ์ง€ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.

 

  • <body> ํƒœ๊ทธ ๋์— ์ถ”๊ฐ€
<html>
  <head>
  </head>
  <body>
    <h2>Hello JavaScript!</h2>
    <script src="javascript.js"></script>
  </body>
</html>

<body> ํƒœ๊ทธ ์•ˆ์— <script> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, <body> ํƒœ๊ทธ ๋‚ด๋ถ€๋ฅผ ํ•ด์„ํ•˜๊ณ  <script> ํƒœ๊ทธ๋ฅผ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— JavaScript์—์„œ <body> ํƒœ๊ทธ ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•ด๋„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

<body> ํƒœ๊ทธ ์•ˆ์— <script> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๊ฐ€  ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋‚ด์šฉ์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ HTML ์ฝ”๋“œ๊ฐ€ js์— ์˜์กด์ ์ด๋ผ๋ฉด ์˜๋ฏธ์žˆ๋Š” ํ™”๋ฉด์„ ๋ณด๊ธฐ๊นŒ์ง€๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

  • <head> ํƒœ๊ทธ ์•ˆ์— defer ์†์„ฑ๊ณผ ํ•จ๊ป˜ ์ถ”๊ฐ€
<html>
  <head>
    <script defer src="javascript.js"></script>
  </head>
  <body>
    <h2>Hello JavaScript!</h2>
  </body>
</html>

<script> ํƒœ๊ทธ ๋‚ด์— defer ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด HTML ํ•ด์„์ด ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  js ํŒŒ์ผ์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ํ›„ ์‹คํ–‰๋œ๋‹ค.

<head> ํƒœ๊ทธ ์•ˆ์— <script> ํƒœ๊ทธ๋ฅผ defer ์†์„ฑ๊ณผ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, HTML ํ•ด์„๊ณผ <script> ํƒœ๊ทธ ํ•ด์„์ด ๋™์‹œ์— ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ณ  ์™„์ „ํ•˜๊ฒŒ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

โœ๏ธ DOM์œผ๋กœ ์ž์‹์š”์†Œ, ๋ถ€๋ชจ์š”์†Œ ์ถœ๋ ฅํ•˜๊ธฐ

console.dir(document.body.children); // <body>์˜ ์ž์‹์š”์†Œ๋“ค์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ถœ๋ ฅ(console.dir)
console.dir(document.body.parentElement); // <body>์˜ ๋ถ€๋ชจ์š”์†Œ๋ฅผ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ถœ๋ ฅ
<body>์˜ ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ..., n ๋ฒˆ์งธ ์ž์‹๋งŒ ์กฐํšŒํ•˜๋ ค๋ฉด document.body.children[n-1]๋กœ ์กฐํšŒํ•˜๋ฉด ๋œ๋‹ค.

 

 

DOM ๋‹ค๋ฃจ๊ธฐ


โœ๏ธ DOM ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ

CRUD

CRUD๋ž€? ๋งŒ๋“ค๊ณ (Create) ์กฐํšŒํ•˜๊ณ (Read) ๊ฐฑ์‹ ํ•˜๊ณ (Update) ์‚ญ์ œํ•˜๋Š”(Delete) ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

  • CREATE
document.createElement('div'); // <div> ์š”์†Œ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • READ
document.querySelector('.tweet'); // class="tweet"์ธ ์š”์†Œ ์ค‘ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
document.querySelectorAll('.tweet'); // class="tweet"์ธ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์œ ์‚ฌ ๋ฐฐ์—ด๋กœ ์กฐํšŒํ•œ๋‹ค.
์ด์ „ ๋ฒ„์ „ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•œ ์˜›๋‚  ๋ฐฉ์‹ READ
document.getElementById('tweet'); // document.querySelector('#tweet')์™€ ๋™์ผ
document.getElementsByClassname('tweet'); // document.querySelector('.tweet')์™€ ๋™์ผ
  • UPDATE
document.querySelector('.tweet').textContent = 'tweet';
// class="tweet"์ธ ์š”์†Œ ์ค‘ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ๋ฌธ์ž์—ด์„ 'tweet'์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.(update)
const newTweet = document.createElement('div');
newTweet.classList.add('tweet'); // newTweet์— class="tweet"์„ ์ถ”๊ฐ€ํ•œ๋‹ค.(update)
document.body.append(newTweet); // newTweet์„ <body>์˜ ์ž์‹์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.(update)
  • DELETE
newTweet.classList.remove('tweet') // newTweet์˜ class="tweet"๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
newTweet.remove(); // newTweet ์š”์†Œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
document.body.removeChild(document.body.firstChild); // body์˜ ํŠน์ • ์ž์‹์š”์†Œ(์ฒซ ๋ฒˆ์งธ)๋งŒ ์‚ญ์ œํ•œ๋‹ค.
removeChild์™€ while, forEach, let of ๋ฌธ์„ ์ด์šฉํ•ด ์ž์‹์š”์†Œ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ด๋ฒคํŠธ ๊ฐ์ฒด


๋‚ด์šฉ

profile

Dream๐Ÿฐng

@shoupeach

๐Ÿฐ Happy new rabbit! ๐Ÿฐ

profile on loading

Loading...