[JS/Browser] DOM

๋””๋”ฉยท2022๋…„ 11์›” 10์ผ
0

Section

๋ชฉ๋ก ๋ณด๊ธฐ
17/18
post-thumbnail

๐Ÿ•– DAY +16 / 2022. 11. 10

SEB FE / Section1 / Unit10 / JS/Browser DOM



๐Ÿ“Œ Today I Learned

  • DOM

๐Ÿ’ฌ DOM ๊ธฐ์ดˆ ๊ฐœ์š”

DOM์ด๋ž€ Document Object Model์ž…๋‹ˆ๋‹ค. document๋ฅผ ๊ฐ์ฒด๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
DOM์€ Document Object Model์˜ ์•ฝ์ž๋กœ, HTML ์š”์†Œ๋ฅผ Object(JavaScript Object)์ฒ˜๋Ÿผ ์กฐ์ž‘(Manipulation)ํ•  ์ˆ˜ ์žˆ๋Š” Model์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ๋ถ„์ด JavaScript๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด, DOM์œผ๋กœ HTML์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

html
-head
--title
--meta
--link
-body
--header#header
---nav
---div
--main
--footer
---"hello"
--script

๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ๊ณ„์ธต์  ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ์š”. header, main, footer, script์˜ ๋ถ€๋ชจ๋Š” body์ด๊ณ , head์™€ body์˜ ๋ถ€๋ชจ๋Š” html์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. head์™€ body๋Š” ํ˜•์ œ์ž๋งค ๊ด€๊ณ„์ด๊ฒ ์ฃ . header๋Š” body์˜ ์ž์‹์ด๊ณ ์š”. footer์˜ ์•ˆ์—๋Š” ํƒœ๊ทธ ๋Œ€์‹  "hello"๋ผ๋Š” ๋ฌธ์ž๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ „ ์‹œ๊ฐ„์— ๋‹ค๋ฃฌ ํ…์ŠคํŠธ ๋…ธ๋“œ์ฃ .

์ด๊ฑธ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  document: {
    html: {
      head: {
        title: ...
      },
      body: {
        header: ...
      }
    }
  }
}

์ด๋ ‡๊ฒŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ๋งŒ๋“  ๊ฒŒ DOM์ž…๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ์ฒด ๋ชจ์–‘์œผ๋กœ ํ‘œํ˜„๋์ฃ ? ๊ฐ€์žฅ ์œ„๋Š” document๊ณ ์š”. ์ž์‹์œผ๋กœ ๊ฐˆ ๋•Œ๋Š” html ํƒœ๊ทธ๋ฅผ ๊ฑด๋„ˆ ๋›ฐ๊ณ , head์™€ body๋กœ ๊ฐ‘๋‹ˆ๋‹ค. head์™€ body๋Š” ๊ฐ๊ฐ document.head, document.body๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Node์™€ Element] https://velog.io/@dding/node-elemnet

๐Ÿ’ฌ HTML์— JavaScript ์ ์šฉํ•˜๊ธฐ

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

์Šคํฌ๋ฆฝํŠธ ์œ„์น˜
https://velog.io/@dding/html-script

๐Ÿ“‚ ์˜ˆ์ œ 1

  • ๋‹ค์Œ HTML ๋ฌธ์„œ์—์„œ body ์š”์†Œ์˜ ์ž์‹ ์š”์†Œ(element)๋Š” ์ด ๋ช‡ ๊ฐœ์ธ์ง€ ๊ณ ๋ฅด์„ธ์š”.
<html>
  <body>
    <div id="nav">
      <div class="logo"></div>
      <div class="menu-wrapper">
        <div class="menu"></div>
        <div class="menu"></div>
        <div class="menu"></div>
        <div class="profile-photo"></div>
      </div>
    </div>
    <div id="news-contents">
      <div class="news-content-wrapper">
        <div class="news-picture"></div>
        <div class="news-title"></div>
        <div class="news-description"></div>
      </div>
    </div>
    <div id="footer"></div>
  </body>
</html>

body ์š”์†Œ์˜ ์ž์‹ ์š”์†Œ๋Š” ์ด 3๊ฐœ์ž…๋‹ˆ๋‹ค. id๊ฐ€ nav, news-contents, footer ์ธ 3๊ฐ€์ง€ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ DOM์€ document ๊ฐ์ฒด์— ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ๋Š”, ์–ด๋””์—์„œ๋‚˜ document ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ, body๋ฅผ ์ฐพ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

DOM ๊ตฌ์กฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ์—๋Š” console.dir ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. console.dir ์€ console.log ์™€ ๋‹ฌ๋ฆฌ DOM์„ ๊ฐ์ฒด์˜ ๋ชจ์Šต์œผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

console.dir(document.body) ๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ๋œ ๊ฐ์ฒด์—์„œ, children ์†์„ฑ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. children ์†์„ฑ์— nav, news-contents, footer ๊ฐ€ ์ž์‹์œผ๋กœ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  document.body.children ์œผ๋กœ ๋ฐ”๋กœ ์กฐํšŒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‚ ์˜ˆ์ œ 2

  • ๋‹ค์Œ HTML ๋ฌธ์„œ์—์„œ id์˜ ์ด๋ฆ„์ด news-contents ์ธ ์š”์†Œ์˜ ๋ถ€๋ชจ ์š”์†Œ๋Š” ๋ฌด์—‡์ธ์ง€ ๊ณ ๋ฅด์„ธ์š”.
<html>
  <body>
    <div id="nav">
      <div class="logo"></div>
      <div class="menu-wrapper">
        <div class="menu"></div>
        <div class="menu"></div>
        <div class="menu"></div>
        <div class="profile-photo"></div>
      </div>
    </div>
    <div id="news-contents">
      <div class="news-content-wrapper">
        <div class="news-picture"></div>
        <div class="news-title"></div>
        <div class="news-description"></div>
      </div>
    </div>
    <div id="footer"></div>
  </body>
</html>

id๊ฐ€ news-contents ์ธ div ์š”์†Œ๋Š” <body> ์š”์†Œ์˜ ์ž์‹ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ <body> ์š”์†Œ๋Š” id๊ฐ€ news-contents div ์š”์†Œ์˜ ๋ถ€๋ชจ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด ๊ด€๊ณ„๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. id๊ฐ€ news-contents ์ธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด, document.body.children ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

document.body.children[1]

div#news=contents
	accessKey: ""
    ...

document.body ์˜ children์„ ์กฐํšŒํ•  ๋•Œ๋งˆ๋‹ค, ๋งค๋ฒˆ document.body ๋กœ๋ถ€ํ„ฐ ์ฐพ์•„๊ฐ€๋Š” ์ผ์€ ์ •๋ง ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ์„ ํ•ด์„œ ์ด ์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋‘๋ฉด, ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ๋“ ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ newsContents ๋ฅผ ๋”ฐ๋กœ ์„ ์–ธํ•˜์—ฌ id๊ฐ€ news-contents ์ธ ์š”์†Œ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

let newsContents = document.body.children[1]

console.log(newsContents)

div#news=contents
	accessKey: ""

๐Ÿ’ฌ DOM ๋‹ค๋ฃจ๊ธฐ

๐Ÿ“‚ CREATE

document ๊ฐ์ฒด์˜ createElement ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ<div> ์š”์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

document.createElement('div')
// ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ div element๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
const tweetDiv = document.createElement('div')

create๋งŒ ํ•œ ์š”์†Œ๋Š” ํ˜„์žฌ ๊ณต์ค‘๋ถ€์–‘ ์ค‘์ด๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ“‚ APPEND

// ๋ณ€์ˆ˜ tweetDiv์— ๋‹ด๊ธด ์ƒˆ๋กœ์šด <div> ์š”์†Œ๋ฅผ <body> ์š”์†Œ์— append ํ•ฉ๋‹ˆ๋‹ค.
document.body.append(tweetDiv)

ํ™”๋ฉด์ƒ์œผ๋ก  ์•„๋ฌด๊ฒƒ๋„ ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒŒ ์ •์ƒ์ด๋‹ค. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ Elements ํƒญ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“‚ READ

DOM์œผ๋กœ HTML ์—˜๋ฆฌ๋จผํŠธ์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” querySelector์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ์…€๋ ‰ํ„ฐ(selector)๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์…€๋ ‰ํ„ฐ๋กœ๋Š” HTML ์š”์†Œ("div"), id("#tweetList"), class(.tweet) ์„ธ ๊ฐ€์ง€๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ querySelector๋Š” ์…€๋ ‰ํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. query์˜ ์˜๋ฏธ๊ฐ€ "์งˆ๋ฌธํ•˜๋‹ค"๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์—ญํ• ์„ ์‰ฝ๊ฒŒ ์œ ์ถ”ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด query๋ผ๋Š” ๋‹จ์–ด๋Š” ๊ฐœ๋ฐœ์ž ๊ฐ„์— "ใ…‡ใ…‡ใ…‡๋ฅผ ์กฐํšŒํ•œ๋‹ค"๋ผ๋Š” ์˜๋ฏธ๋ฅผ "์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋‹ค"๋ผ๋Š” jargon(ํŠน์ • ์˜์—ญ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด)๋กœ ๊ตณ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

querySelector

querySelector ์— '.tweet' ์„ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋„ฃ์œผ๋ฉด, ํด๋ž˜์Šค ์ด๋ฆ„์ด tweet ์ธ HTML ์—˜๋ฆฌ๋จผํŠธ ์ค‘ ์ฒซ ๋ฒˆ์งธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const oneTweet = document.querySelector('.tweet')

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š”, querySelectorAll ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const tweets = document.querySelectorAll('.tweet')

CREATE์—์„œ ์ƒ์„ฑํ•œ div ์š”์†Œ๋ฅผ container์— ๋„ฃ์„ ์ค€๋น„๋ฅผ ๋งˆ์ณค์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, container์˜ ๋งจ ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ๋กœ tweetDiv๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

const container = document.querySelector('#container')
const tweetDiv = document.createElement('div')
container.append(tweetDiv)

๐Ÿ“‚ UPDATE

// ๋นˆ div ํƒœ๊ทธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค
const oneDiv = document.createElement('div');
console.log(oneDiv) // <div></div>

๋นˆ div ํƒœ๊ทธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ, ๋ณด๋‹ค ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ €, textContent ๋ฅผ ์‚ฌ์šฉํ•ด์„œ, ๋น„์–ด์žˆ๋Š” div ์—˜๋ฆฌ๋จผํŠธ์— ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

CSS ์Šคํƒ€์ผ๋ง์ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก, div ์—˜๋ฆฌ๋จผํŠธ์— class๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

oneDiv.classList.add('tweet')
console.log(oneDiv) // <div class="tweet">dev</div>

์ƒ์„ฑํ•œ ์—˜๋ฆฌ๋จผํŠธ์— ํ…์ŠคํŠธ๋ฅผ ์ฑ„์› ๊ณ , ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์Šคํƒ€์ผ๋ง์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” append๋ฅผ ์ด์šฉํ•ด container์˜ ์ž์‹ ์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

const container = document.querySelector('#container')
container.append(oneDiv)

๐Ÿ“‚ DELETE

const container = document.querySelector('#container')
const tweetDiv = document.createElement('div')
container.append(tweetDiv)
tweetDiv.remove() // ์ด๋ ‡๊ฒŒ append ํ–ˆ๋˜ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

innerHTML ์„ ์ด์šฉํ•˜๋ฉด, ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ์ง€์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ์ง€์šฐ๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

document.querySelector('#container').innerHTML = '';

innerHTML ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ถ„๋ช… ๊ฐ„ํŽธํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ๋ฐฉ์‹์ด์ง€๋งŒ, innerHTML์€ ๋ณด์•ˆ์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ๋Œ€์‹ ํ•  ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. removeChild ๋Š” ์ž์‹ ์š”์†Œ๋ฅผ ์ง€์ •ํ•ด์„œ ์‚ญ์ œํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ˜๋ณต๋ฌธ(while, for, etc.)์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ์ฝ”๋“œ๋Š” ์ž์‹ ์š”์†Œ๊ฐ€ ๋‚จ์•„์žˆ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€, ์ฒซ ๋ฒˆ์งธ ์ž์‹ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

const container = document.querySelector('#container');
while (container.firstChild) {
  container.removeChild(container.firstChild);
}
// container์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜๋ฉด, ์ฒซ ๋ฒˆ์งธ ์ž์‹ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

removeChild ์™€ while ์„ ์ด์šฉํ•ด ์ž์‹ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด, ์ œ๋ชฉ์— ํ•ด๋‹นํ•˜๋Š” H2 "Tweet List"๊นŒ์ง€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ์š”์†Œ๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•ด "Tweet List"๋งŒ ๋‚จ๊ธฐ๊ฑฐ๋‚˜, ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Tweet List๋ฅผ ํ• ๋‹นํ•ด๋’€๋‹ค๊ฐ€ ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚œ ๋’ค์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์ž์‹ ์š”์†Œ๋ฅผ ํ•˜๋‚˜๋งŒ ๋‚จ๊ธฐ๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

// container์˜ ์ž์‹ ์š”์†Œ๊ฐ€ 1๊ฐœ๋งŒ ๋‚จ์„ ๋•Œ๊นŒ์ง€, ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
const container = document.querySelector('#container');
while (container.children.length > 1) {
  container.removeChild(container.lastChild);
}

๋˜๋Š” ์ง์ ‘ ํด๋ž˜์Šค ์ด๋ฆ„์ด tweet์ธ ์š”์†Œ๋งŒ ์ฐพ์•„์„œ ์ง€์šฐ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

const tweets = document.querySelectorAll('.tweet')
tweets.forEach(function(tweet){
    tweet.remove();
})
// or
for (let tweet of tweets){
    tweet.remove()
}
profile
๋ฌด์‚ฌ์™€์š”... ์—ด๊ณตํ–์š”...

0๊ฐœ์˜ ๋Œ“๊ธ€