roqkf

[JavaScript] DOM ๋ณธ๋ฌธ

๐Ÿ’ป Development/JavaScript

[JavaScript] DOM

ahyeon7 2022. 11. 25. 01:22

DOM(Document Object Model)์ด๋ž€?

  • HTML ์š”์†Œ๋ฅผ Object์ฒ˜๋Ÿผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” Model
  • HTML์˜ ์•„์ฃผ ์ž‘์€ ๋ถ€๋ถ„๊นŒ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ DOM์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • DOM์„ ์ด์šฉํ•˜๋ฉด HTML๋กœ ๊ตฌ์„ฑ๋œ ์›นํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์›€์ง์ด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • document ๊ฐ์ฒด์— ๊ตฌํ˜„๋ผ ์žˆ๋‹ค.
  • DOM์€ 'ํŠธ๋ฆฌ ๊ตฌ์กฐ'๋‹ค! (๋ถ€๋ชจ๊ฐ€ ์ž์‹์„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€์ง€๊ณ , ๋ถ€๋ชจ๊ฐ€ ํ•˜๋‚˜์ธ ๊ตฌ์กฐ๊ฐ€ ๋ฐ˜๋ณต)

HTML์— JavaScript๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

<script src="index.js"></script>

- HTML ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•˜๋Š” index.js๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
  • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๋Š” ๊ณผ์ •์—์„œ <script> ์š”์†Œ๋ฅผ ๋งŒ๋‚˜๋ฉด HTML ํ•ด์„์„ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  <script> ์š”์†Œ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•œ๋‹ค! ๋“ฑ์žฅ๊ณผ ํ•จ๊ป˜ ์‹คํ–‰๋œ๋‹ค๋Š” ์ !

<script> ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. <head> ์š”์†Œ์— ์ถ”๊ฐ€
  2. </body> ๊ฐ€ ๋๋‚˜๊ธฐ ์ „์— ์ถ”๊ฐ€

 

DOM ๊ตฌ์กฐ ์กฐํšŒ

body๋ฅผ ์ฐพ์•„๋ณด์ž
console.dir(document.body)
+ console.log์™€ ๋‹ฌ๋ฆฌ DOM์„ ๊ฐ์ฒด์˜ ๋ชจ์Šต์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

CREATE

document.createElement('div') // <div> ์š”์†Œ ๋งŒ๋“ค๊ธฐ

์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ž˜ ๋งŒ๋“ค์–ด์ง„ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค!

์ƒˆ๋กœ ๋งŒ๋“  div ์š”์†Œ๋ฅผ ํ™œ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?
๋ณ€์ˆ˜์— ํ• ๋‹น ํ•˜์ž!

const tweetDiv = document.createElement('div')

<div>๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ๋ณ€์ˆ˜ tweetDiv์— ํ• ๋‹นํ•˜์˜€์œผ๋‹ˆ tweetDiv๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋˜๊ฒ ๋‹ค!!

READ

DOM์„ ์ด์šฉํ•ด HTML Element๋ฅผ ์กฐํšŒํ•˜๊ธฐ

const oneTweet = document.querySelector('.tweet') 
- ํด๋ž˜์Šค๋ช…์ด tweet์ธ HTML ์—˜๋ฆฌ๋จผํŠธ ์ค‘ ์ฒซ ๋ฒˆ์งธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์กฐํšŒ!

?? ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋งŒ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฑฐ ๋ง๊ณ  ํด๋ž˜์Šค๋ช…์ด tweet์ธ ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ ์ˆ˜ ์žˆ์„๊นŒ
const oneTweet = documetn.querySelectorAll('.tweet')

1. Document.querySelector(selectors);
- ์ฒซ ๋ฒˆ์งธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜, ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด null์ด ๋ฐ˜ํ™˜๋œ๋‹ค!

2. Document.querySelectorAll(selectors);
- ์ง€์ •๋œ ์…€๋ ‰ํ„ฐ ๊ทธ๋ฃน์— ์ผ์น˜ํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์  NodeList๋ฅผ ๋ฐ˜ํ™˜

3. Document.getElementById(selectors); 
- get์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” DOM ์กฐํšŒ ๋ฉ”์„œ๋“œ๋„ ์กด์žฌํ•œ๋‹ค
- ์ด์ „ ๋ฒ„์ „์˜ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ์— ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค๋ฉด get ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค!

* ์‹ค์ œ ๋™์ž‘์€ ๋™์ผํ•จ
const getOneTweet = document.getElementById('container')
const queryOneTweet = document.querySelector('#container')
console.log(getOneTweet === queryOneTweet) // true

div๋ฅผ ์ƒ์„ฑํ•˜์—ฌ container์˜ ๋งจ ๋งˆ์ง€๋ง‰ ์ž์‹์˜ ์š”์†Œ๋กœ tweetDiv ์ถ”๊ฐ€ํ•˜๊ธฐ(append();)

const container = document.querySelector('#container') // ์•„์ด๋””๊ฐ€ 'container'์ธ ์—˜๋ฆฌ๋จผํŠธ ์กฐํšŒ
const tweetDiv = document.createElement('div')
container.append(tweetDiv)

UPDATE

๋นˆ div ์š”์†Œ์— ๋ฌธ์ž์—ด์„ ์‚ฝ์ž…ํ•ด ๋ณด์ž!

const oneDiv = document.createElement('div'); // div ์ƒ์„ฑ
oneDiv.textContent = 'dev' // <div>dev</div>๋กœ ์—…๋ฐ์ดํŠธ

class๊ฐ€ 'tweet'์ธ ์š”์†Œ์— css๊ฐ€ ์ ์šฉ๋ผ ์žˆ๋‹ค๋ฉด ๋ฐฉ๊ธˆ ๋งŒ๋“  div์—๋„ tweet ์š”์†Œ์— ์”Œ์—ฌ์ง„ css๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋„ฃ๊ณ  ์‹ถ๋‹ค? div์— class๋ฅผ ๋ถ€์—ฌํ•ด ์ฃผ์ž!

oneDiv.classList.add('tweet')

๋‹ค๋ฅธ attribute ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•?
+ setAttribute ํ•จ์ˆ˜

element.setAttribute('attribute_name', 'attribute_value');

ex) ์•„์ด๋””๊ฐ€ test์ธ ์š”์†Œ์— href ์†์„ฑ ๊ฐ’ ๋ณ€๊ฒฝํ•˜๊ธฐ
document.getElementById('test').setAttribute('href', '๋งํฌ ์ฃผ์†Œ');

๋˜๋Š”

const tests = document.querySelector('#test');
tests.setAttribute('href', '๋งํฌ ์ฃผ์†Œ');

์ฐธ๊ณ : https://kkamikoon.tistory.com/entry/Javascript-%EC%9A%94%EC%86%8CElement%EC%9D%98-%EC%86%8D%EC%84%B1Attribute-%EA%B0%92-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

DELETE

const container = document.querySelector('#container') 
const tweetDiv = document.createElement('div')
container.append(tweetDiv) /// container์— tweetDiv ์ถ”๊ฐ€
tweetDiv.remove() // tweetDiv ์‚ญ์ œ

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์‹ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•

document.querySelector('#container').innerHTML = '';
- ๊ฐ„ํŽธํ•˜๊ณ  ํŽธ๋ฆฌํ•˜์ง€๋งŒ ์‚ฌ์ดํŠธ์˜ ๊ณต๊ฒฉ ๊ฒฝ๋กœ๊ฐ€ ๋ผ์„œ ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ  ํ•˜๋‹ˆ ์ง€์–‘ํ•˜์ž!

๋ฐ˜๋ณต๋ฌธ ํ™œ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์‹ ์š”์†Œ๋ฅผ ์‚ญ์ œ

const container = document.querySelector('#container');
while (container.firstChild) {
  container.removeChild(container.firstChild);
}

ํด๋ž˜์Šค ์ด๋ฆ„์ด tweet์ธ ์š”์†Œ๋งŒ ์ฐพ์•„์„œ ์ง€์šฐ๊ธฐ

const tweets = document.querySelectorAll('.tweet')
tweets.forEach(function(tweet){
    tweet.remove();
})
// or
for (let tweet of tweets){
    tweet.remove()
}

'๐Ÿ’ป Development > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JavaScript] ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค  (0) 2022.11.25
[JavaScript] ๊ณ ์ฐจํ•จ์ˆ˜  (0) 2022.11.25
[JavaScript] Hoisting  (0) 2022.11.25
[JavaScript] ๊ฐ์ฒด  (0) 2022.11.25
[JavaScript] ๋ฐฐ์—ด  (0) 2022.11.25