JavaScript DOM

Angela_Hongยท2023๋…„ 1์›” 31์ผ
1
post-thumbnail

๐Ÿ—‚ DOM๊ณผ DOMํŠธ๋ฆฌ

๐Ÿ“‚ DOM์ด๋ž€?

๐Ÿ“•DOM (Document Object Model) ์ด๋ž€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์›น ๋ฌธ์„œ์— ์ ‘๊ทผํ•˜๊ณ  ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์›น๋ฌธ์„œ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.
DOM์—์„œ๋Š” ์›น ๋ฌธ์„œ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์ •์˜ํ•˜๊ณ , ์›น ๋ฌธ์„œ๋ฅผ ์ด๋ฃจ๋Š” ํ…์ŠคํŠธ๋‚˜ ์ด๋ฏธ์ง€, ํ‘œ ๋“ฑ ๋ชจ๋“  ์š”์†Œ๋„ ๊ฐ๊ฐ ๊ฐ์ฒด๋กœ ์ •์˜ํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด, ์›น๋ฌธ์„œ ์ „์ฒด๋Š” document๊ฐ์ฒด๋กœ, ์›น ๋ฌธ์„œ์— ์‚ฝ์ž…๋œ ์ด๋ฏธ์ง€๋Š” image๊ฐ์ฒด๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค.
์ด๋ ‡๊ฒŒ ์›น ๋ฌธ์„œ์™€ ๊ทธ ์•ˆ์˜ ์š”์†Œ๋“ค์„ ๊ฐ์ฒด๋กœ ์ธ์‹ํ•˜๊ณ  ์กฐ์ ˆํ•˜๋ฏ€๋กœ ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ“‚ DOMํŠธ๋ฆฌ๋ž€?

๐Ÿ“• DOMํŠธ๋ฆฌ๋ž€?

DOM์„ ํ™œ์šฉํ•ด ์›น ๋ฌธ์„œ์˜ ์š”์†Œ๋ฅผ ๋ถ€๋ชจ์™€ ์ž์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ํ‘œ์‹œํ•˜๋‹ค ๋ณด๋ฉด ๋งˆ์น˜ ๋‚˜๋ฌด์ฒ˜๋Ÿผ ๋ชจ์–‘์ด ๋‚˜ํƒ€๋‚˜ ์ด๊ฒƒ์„ DOMํŠธ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
์›น ๋ฌธ์„œ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒœ๊ทธ๊ฐ€ ์„œ๋กœ ํฌํ•จ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์ด๋Ÿฐ ํฌํ•จ ๊ด€๊ณ„๋•Œ๋ฌธ์— ๊ฐ ํƒœ๊ทธ ๊ฐ„์—๋Š” '๋ถ€๋ชจ'์™€ '์ž์‹'๊ด€๊ณ„๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๊ณ , ์ด ๋•Œ ๋ฐ–์— ์žˆ๋Š” ์š”์†Œ๋Š” ๋ถ€๋ชจ์š”์†Œ, ์•ˆ์— ํฌํ•จ๋œ ์š”์†Œ๋Š” ์ž์‹์š”์†Œ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด, ์•„๋ž˜ 1๋ฒˆ์„ ๋ณด๊ฒŒ ๋˜๋ฉด html์š”์†Œ๋Š” head์š”์†Œ์™€ body์š”์†Œ์˜ ๋ถ€๋ชจ ์š”์†Œ๊ฐ€ ๋˜๊ณ  body์š”์†Œ๋Š” ๋‹ค์‹œ h1์š”์†Œ์™€ ul์š”์†Œ์˜ ๋ถ€๋ชจ์š”์†Œ๊ฐ€ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋์ด ๋˜์ง€ ์•Š๊ณ  li์š”์†Œ๋Š” ๋‹น๊ทผ์˜ ๋ถ€๋ชจ๊ฐ€ ๋˜๊ณ  button์€ ์•Œ๊ฒ ๋‹ˆ?์˜ ๋ถ€๋ชจ๊ฐ€ ๋œ๋‹ค.


๐Ÿ“Œ DOM ์ถ”๊ฐ€ ์„ค๋ช…

1๋ฒˆ

<html lang="ko">
  <head>
    <title>DOM ์˜ˆ์ œ</title>
  </head>
  <body>
    <h1 id="title">์žฅ ๋ณผ ๋‚ด์—ญ</h1>
    <ul>
      <li>๋‹น๊ทผ</li>
      <li>์˜ค์ด</li>
      <li>์–‘ํŒŒ</li>
    </ul>
    <button>์•Œ๊ฒ ๋‹ˆ?</button>
  </body>
</html>

2๋ฒˆ (1๋ฒˆ์˜ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด)

3๋ฒˆ (1๋ฒˆ ์ฝ”๋“œ ์ˆ˜์ •์„ ์œ„ํ•œ ์ฝ”๋“œ)

const title = document.getElementById("title");
title.textContent = "์ฃผ๋ฌธํ•  ๊ฒƒ";

4๋ฒˆ (3๋ฒˆ์—์„œ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ๋ฅผ ๋Œ€์ž…ํ•œ ๋ชจ์Šต)

์œ„์˜ 3๋ฒˆ์—์„œ ๋‚˜์˜ค๋Š” document์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๋ฉด,
๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์ฐฝ์— console.log(document);๋ฅผ ์ž…๋ ฅํ•˜๋ฉด
5๋ฒˆ๊ณผ ๊ฐ™์ด document๊ฐ์ฒด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค

5๋ฒˆ

๋ฐ˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ์ปดํ“จํ„ฐ ์ž์ฒด์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Node.jsํ™˜๊ฒฝ์—์„œ ๋˜‘๊ฐ™์ด ์‹คํ–‰ํ•ด๋ณด๋ฉด
6๋ฒˆ๊ณผ ๊ฐ™์ด document is not defined๋ผ๊ณ  ๋‚˜์˜จ๋‹ค.

6๋ฒˆ

์ด๊ฒƒ์œผ๋กœ ๋ณด์•„
document ๊ฐ์ฒด๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ๋งŒ ์ ‘๊ทผ์ด ๋œ๋‹ค๋Š”๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋Š”๊ฑด document ๊ฐ์ฒด๊ฐ€
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž์ฒด์˜ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ธŒ๋ผ์šฐ์ €๋ž€ ํ™˜๊ฒฝ์—์„œ ์ œ๊ณต๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์›น ๊ฐœ๋ฐœ์—์„œ ์‚ฌ์šฉ๋˜๋Š” document๊ฐ์ฒด๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” window ๊ฐ์ฒด์˜ ํ•œ ์š”์†Œ์ด๊ณ ,
์ด window.document ๊ฐ์ฒด๋ฅผ DOM์ด๋ผ๊ณ  ๋ถ„๋ฅ˜ํ•œ๋‹ค.

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

์ •๋ฆฌํ•˜์ž๋ฉด, HTML์ด๋ž€ ์„ค๊ณ„๋„๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋ž€ ๊ณต์žฅ์œผ๋กœ ๋ณด๋‚ด๋ฉด DOM์ด๋ผ๋Š” ๊ธฐ๊ณ„๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

7๋ฒˆ (1๋ฒˆ์˜ DOMํŠธ๋ฆฌ๊ตฌ์กฐ)

DOM์€ 7๋ฒˆ ํŠธ๋ฆฌ ์ „์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ˆ์˜ ์š”์†Œ๋“ค ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ Node๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค
์šฐ๋ฆฌ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์›นํŽ˜์ด์ง€์˜ ์š”์†Œ๋“ค์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š”๊ฑด ์ด๊ฒƒ๋“ค ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ๋ชจ๋‘ API์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

๐Ÿ“Œ API๋ž€?
๋„ค๊ฐ€ ์ด๋ ‡๊ฒŒ ์ฃผ๋ฌธํ•˜๋ฉด ๋‚ด๊ฐ€ ์š”๋ ‡๊ฒŒ ํ•ด์ค„๊ฒŒ ๋ผ๊ณ  ๋ฉ”๋‰ดํŒ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด๋†“์€ ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค
์ฝœ๋ผ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์บ”์ฝœ๋ผ๊ฐ€ ๋‚˜์˜ค๋Š” ์žํŒ๊ธฐ์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋“ค์„ ๋‚จ์ด ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ๋ฒ„ํŠผ๋“ค ๊ฐ™์€ ๊ฑธ ๋งŒ๋“ค์–ด๋‘” ๊ฒƒ

DOM์˜ ์—ญํ• 
์œ„์˜ 3๋ฒˆ์˜ document๊ฐ€ ํŠธ๋ฆฌ๊ตฌ์กฐ ๊ทธ๋ฆผ์˜ document๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
document์—๋Š” getElementById๋ž€ ๋ฒ„ํŠผ, ์ฆ‰ ๊ธฐ๋Šฅ์ด ์žˆ๋Š”๋ฐ ์ด๊ฑด DOM๋‚ด์— ์ฃผ์–ด์ง„ ID, ์—ฌ๊ธฐ์„œ๋Š” title์„ ๊ฐ€์ง„ ๋…ธ๋“œ ์ฆ‰, h1์ด๋ž€ ๋ถ€ํ’ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค.

1๋ฒˆ ์˜ˆ์ œ์—์„œ๋Š” h1, ul, li, button์š”์†Œ๋“ค์ด ์‚ฌ์šฉ๋๊ณ 
์ด ์š”์†Œ๋“ค์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ƒ์† ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

8๋ฒˆ (์š”์†Œ๋“ค์˜ ์ƒ์†๊ตฌ์กฐ)

8๋ฒˆ์€ ๊ฐ ์š”์†Œ๊ฐ€ ์–ด๋–ค ๋ฒ”์ฃผ์— ์†ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์†๋„์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด, h1 > HTMLHeadingElement > HTMLElement > Element > Node > EventTarget
์ด ๊ตฌ์กฐ๋กœ ์ƒ์† ๋ฐ›๋Š”๋‹ค (์ƒ์†์€ ํ•œ ์ข…๋ฅ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค)

๊ฒฐ๊ตญ ์—ฌ๊ธฐ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ๋“ค์ด EventTarget์ด๋ž€ ๊ณตํ†ต๋ฒ”์ฃผ์— ์†ํ•œ๋‹ค.
์ฆ‰, ๋ชจ๋‘ EventTarget์ด๋‹ค.

getElementById๋Š” Document์˜ ๊ณ ์œ  ๊ธฐ๋Šฅ, ๋•Œ๋ฌธ์— document์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค

textContent๋Š” Node์˜ ๊ธฐ๋Šฅ์ด๋‹ค. ๊ทธ ๋ง์ธ ์ฆ‰์Šจ, ๊ทธ ๋ฐ‘์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์†Œ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

EventTarget์€ ์–ด๋–ค ์ด๋ฒคํŠธ๋“ค์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ์ด๋Š” ํด๋ฆญ์ด๋‚˜ ๋“œ๋ž˜๊ทธ, ํ‚ค๋ณด๋“œ ์ž…๋ ฅ, ์š”์†Œ ๋กœ๋“œ ๋“ฑ์˜ ์ด๋ฒคํŠธ๋“ค์„ ๋งํ•œ๋‹ค.

addEventListener : ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ค ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋ผ๊ณ  ํŠน์ • ์š”์†Œ์— ๋“ฑ๋ก์„ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ
addEventListener๋Š” EventTarget์˜ ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ๋ชจ๋“  ์š”์†Œ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
์ด์ฒ˜๋Ÿผ DOM์š”์†Œ๋“ค์˜ ๊ณ ์œ ๊ธฐ๋Šฅ๊ณผ ์ƒ์†๊ด€๊ณ„๋ฅผ ์•Œ๋ฉด ๊ฐ๊ฐ์—์„œ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค

๐Ÿ“Œ BOM
Browser Object Model
๋ธŒ๋ผ์šฐ์ €๋Š” DOM๋ง๊ณ ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ผ์–ด๋‚  ์ผ๋“ค์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•  ์ˆ˜ ์žˆ๋„๋ก BOM์„ ์ œ๊ณตํ•œ๋‹ค
๋‹ค๋ฅธ ์›นํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ํ™”๋ฉด ๊ด€๋ จ ์ •๋ณด๋ฅผ ์–ป๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ €์˜ ์•Œ๋ฆผ์ฐฝ์„ ๋„์šฐ๊ฑฐ๋‚˜ AJAX์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋“ฑ ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ๋‹ค

DOM๊ณผ BOM์„ ํ†ตํ‹€์–ด์„œ WEB API๋ผ๊ณ  ํ•œ๋‹ค
WEB API๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ์€ ์•„๋‹ˆ์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•ด ์ œ์–ด๋  ์ˆ˜ ์žˆ๋„๋ก ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณต๋˜๊ณ  ์žˆ๋‹ค


๐Ÿ—‚ ์›น ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ

์›น์š”์†Œ์— ์ ‘๊ทผํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š”
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์›น ๋ฌธ์„œ์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋‚˜ ํ…์ŠคํŠธ, ํ‘œ ๋“ฑ ํŠน์ • ์š”์†Œ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์›น ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ๋Š” querySelector(), querySelectorAll()์„ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.
์ด ํ•จ์ˆ˜๋“ค์€ document ๊ฐ์ฒด์— ํฌํ•จ๋˜์–ด์žˆ๋‹ค.
๊ฐ์ฒด์— ํฌํ•จ๋œ ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋ผ๊ณ ๋„ ํ•˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” ํ•จ์ˆ˜๋ผ๊ณ  ์นญํ•œ๋‹ค.

๐Ÿ“‚ ํ•˜๋‚˜๋งŒ ์ฝ• ์ง‘์–ด๋‚ด๋Š” querySelector()ํ•จ์ˆ˜

document.querySelector(์„ ํƒ์ž)

querySelector()๋ฅผ ์ด์šฉํ•˜๋ฉด ์ง€์ •ํ•œ ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•œ ์š”์†Œ ์ค‘์—์„œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

์˜ˆ) id="container"๋ฅผ ์‚ฌ์šฉํ•œ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด?

document.querySelector("#container")

querySelector()์—์„œ class์„ ํƒ์ž๋‚˜ ํƒœ๊ทธ(ํƒ€์ž…) ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค.
์›น๋ฌธ์„œ์—์„œ๋Š” class์„ ํƒ์ž๋‚˜ ํƒœ๊ทธ ์„ ํƒ์ž๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
querySelector()๋Š” 1๊ฐœ์˜ ์š”์†Œ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์—
class์„ ํƒ์ž๋‚˜ ํƒœ๊ทธ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ ์šฉ๋œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์š”์†Œ ์ค‘ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋งŒ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

์˜ˆ) ์ด๋ฏธ์ง€์— id๋‚˜ class์†์„ฑ์ด ์—†๋‹ค๋ฉด?

document.querySelector("img")

์˜ˆ) ์ด๋ฏธ์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด?
๋‹จ์ˆœํžˆ imgํƒ€์ž… ์Šคํƒ€์ผ๋กœ ์ ‘๊ทผํ•  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•˜์œ„ ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌ์ฒด์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค
(#profile์š”์†Œ ์•ˆ์— img๊ฐ€ ์žˆ๋‹ค)

document.querySelector("#profile img")

๐Ÿ“‚ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” querySelectorAll()ํ•จ์ˆ˜

document.querySelectorAll(์„ ํƒ์ž)

querySelectorAll()๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ) class="user"๋“ค์„ ์‚ฌ์šฉํ•œ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด?

document.querySelectorAll(".user")

์˜ˆ) user ํด๋ž˜์Šค๋“ค ์ค‘ ์„ธ๋ฒˆ์งธ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด?

document.querySelectorAll(".user")[2]

๐Ÿ“‚ ์›น ์š”์†Œ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ์›น ์š”์†Œ์— ์ ‘๊ทผํ•œ ํ›„ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ๋•Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์˜ innerTextํ”„๋กœํผํ‹ฐ๋‚˜ innerHTMLํ”„๋กœํผํ‹ฐ, textContentํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
ํ”„๋กœํผํ‹ฐ๋ž€? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์—์„œ ์†์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์šฉ์–ด์ด๋‹ค.

๐Ÿ“• ์›น ์š”์†Œ์˜ ๋‚ด์šฉ ๊ฐ€์ ธ์˜ค๊ธฐ

์›น์š”์†Œ.innerText
์›น์š”์†Œ.innerHTML
์›น์š”์†Œ.textContent

๐Ÿ“• innerText ํ”„๋กœํผํ‹ฐ

์›น๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ๋ณด์ด๋Š” ๋‚ด์šฉ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค
display:none์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด์—์„œ ๊ฐ์ถ˜ ์š”์†Œ์˜ ๋‚ด์šฉ์€ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š”๋‹ค.
์†Œ์Šค์— ๊ณต๋ฐฑ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์ž…๋ ฅ๋˜์–ด์žˆ์–ด๋„ ์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ๋ณด์ด๋Š” ๋Œ€๋กœ ๊ณต๋ฐฑ 1์นธ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค

document.querySelector("#desc").innerText

๐Ÿ“• innerHTML ํ”„๋กœํผํ‹ฐ

์š”์†Œ ์•ˆ์— ์žˆ๋Š” ํƒœ๊ทธ์™€ ๋‚ด์šฉ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ์™€์„œ ๋ณด์—ฌ์ค€๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€์™€๋Š” ์ƒ๊ด€์—†์ด ์†Œ์Šค์— ์žˆ๋Š”๋Œ€๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

document.querySelector("#desc").innerHTML

๐Ÿ“• textContent ํ”„๋กœํผํ‹ฐ

์š”์†Œ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค์ง€๋งŒ ์›น ๋ธŒ๋ผ์šฐ์ฒ˜ ์ฐฝ์— ๋ณด์ด๋Š” ๋Œ€๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ ์†Œ์Šค์— ์žˆ๋Š” ๋Œ€๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
์›น ๋ฌธ์„œ์—๋Š” ํ™”๋ฉด์— ๋ณด์ด๋Š” ๊ฒƒ๋ณด๋‹ค ๋งŽ์€ ๋‚ด์šฉ์ด ํฌํ•จ๋˜์–ด์žˆ๊ณ  ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ผ๋ถ€๋ฅผ ํ™”๋ฉด์—์„œ ๊ฐ์ถ”๊ธฐ๋„ ํ•œ๋‹ค.
์ด๋ ‡๊ฒŒ ๊ฐ์ถฐ์ง„ ์š”์†Œ๋“ค๊นŒ์ง€ ๊ฐ€์ ธ์™€์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” textContent์†์„ฑ์ด ํŽธ๋ฆฌํ•˜๋‹ค.
์—ฌ๋Ÿฌ ์นธ์˜ ๊ณต๋ฐฑ๋„ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œํ•œ๋‹ค

document.querySelector("#desc").textContent

์ •๋ฆฌํ•˜์ž๋ฉด,
์›น ์š”์†Œ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ : innerText๋‚˜ textContent ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉ
์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ๊นŒ์ง€ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ : textContent ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉ
์š”์†Œ ์•ˆ์— ์žˆ๋Š” ํƒœ๊ทธ๊นŒ์ง€ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ : innerHTML ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉ

๐Ÿ“• ์›น ์š”์†Œ์˜ ๋‚ด์šฉ ์ˆ˜์ •ํ•˜๊ธฐ

์•ž์˜ innerText, innerHTML, textContent ํ”„๋กœํผํ‹ฐ๋Š” ์›น ์š”์†Œ์˜ ๋‚ด์šฉ์„ ๋ฐ”๊ฟ€๋•Œ๋„ ์‚ฌ์šฉํ•œ๋‹ค.
innerText, textContent๋Š” ํ…์ŠคํŠธ ๋‚ด์šฉ์„ ๋ฐ”๊ฟ€ ๋•Œ
innerHTML์€ HTML ํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋œ ๋‚ด์šฉ์„ ๋ฐ”๊ฟ€ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์›น์š”์†Œ.innerText = ๋‚ด์šฉ
์›น์š”์†Œ.innerHTML = ๋‚ด์šฉ
์›น์š”์†Œ.textContent = ๋‚ด์šฉ

์˜ˆ) ์ด๋ฏธ์ง€ ์š”์†Œ์— ์ ‘๊ทผํ•œ ํ›„ src์†์„ฑ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋•Œ src์†์„ฑ์€ ์ด๋ฏธ์ง€ ๊ฐ์ฒด์˜ srcํ”„๋กœํผํ‹ฐ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค

์ด๋ฏธ์ง€์š”์†Œ.src = ์ด๋ฏธ์ง€ ํŒŒ์ผ

ํด๋ฆญํ–ˆ์„ ๋•Œ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
onclick

๋ณ€์ˆ˜.onclick = ํ•จ์ˆ˜

์˜ˆ) title์„ ํด๋ฆญํ–ˆ์„ ๋•Œ title์˜ ๋‚ด์šฉ์„ 'ํ”„๋กœํ•„'๋กœ ๋ฐ”๊พธ๋ ค๋ฉด?

title.onclick = function(){
	title.innerText = "ํ”„๋กœํ•„"
}

๐Ÿ—‚ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์Šคํƒ€์ผ ์ˆ˜์ •ํ•˜๊ธฐ

๐Ÿ“‚ CSS์†์„ฑ์— ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ์Šคํƒ€์ผ ์†์„ฑ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์Šคํƒ€์ผ์„ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์›น ๋ฌธ์„œ์—์„œ ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
CSS์†์„ฑ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์š”์†Œ์— ์ ‘๊ทผํ•œ ํ›„ ์˜ˆ์•ฝ์–ด .style๊ณผ CSS์†์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

์š”์†Œ.style.์†์„ฑ๋ช…

์˜ˆ) ๊ธ€์ž์ƒ‰์— ์ ‘๊ทผํ•˜๋ ค๋ฉด?
style.color
์˜ˆ) ๋ฐฐ๊ฒฝ์ƒ‰์— ์ ‘๊ทผํ•˜๋ ค๋ฉด?
style.backgroundColor

  • background-color์†์„ฑ์ฒ˜๋Ÿผ ๋‘ ๋‹จ์–ด ์ด์ƒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ์—๋Š”
    ์ค‘๊ฐ„์— -๋Œ€์‹œ ์—†์ด ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ฒซ๋ฒˆ์งธ ๊ธ€์ž๋Š” ์†Œ๋ฌธ์ž๋กœ, ๋‘๋ฒˆ์งธ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

์˜ˆ) ์ œ๋ชฉ ๋ถ€๋ถ„์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ๊ธ€์ž์ƒ‰๊ณผ ๊ธ€์ž์˜ ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋ฐ”๊พธ์ž

const title = document.querySelector("#title");
title.onclick = () =>{
	title.style.backgroundColor = "black";
  	title.style.color = "white"
}

๐Ÿ“‚ classList ํ”„๋กœํผํ‹ฐ ์‚ดํŽด๋ณด๊ธฐ

classList๋Š” DOM์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์ด๋‹ค.
์›น ์š”์†Œ์— 2๊ฐœ ์ด์ƒ์˜ ํด๋ž˜์Šค ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

<p class="user clicked">์ด๋ฆ„: ๋„๋ ˆ๋ฏธ</p>

(user ๋”ฐ๋กœ clicked ๋”ฐ๋กœ ์ƒ‰์ƒ์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค)

๐Ÿ“• classList

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ,
classList๋ผ๋Š” ํ”„๋กœํผํ‹ฐ ๋•Œ๋ฌธ์ด๋‹ค.
classList๋Š” ์š”์†Œ์— ์ ์šฉํ•œ ํด๋ž˜์Šค ์Šคํƒ€์ผ์„ ๋ชจ๋‘ ๋ชจ์•„ ๋†“์€ ํ”„๋กœํผํ‹ฐ๋‹ค.

//classList ํ”„๋กœํผํ‹ฐ ์‚ดํŽด๋ณด๊ธฐ
<div id="desc">
  <p class="user clicked">์ด๋ฆ„: ๋„๋ ˆ๋ฏธ</p>
  <p class="user">์ฃผ์†Œ: ์–ด๋”˜๊ฐ€</p>
  <p class="user">์—ฐ๋ฝ์ฒ˜: ๋ญ</p>
</div>
document.querySelector("#desc p").classList


*querySelector์จ์„œ ์ฒซ๋ฒˆ์งธ p์š”์†Œ ํ•˜๋‚˜๋งŒ ์ถœ๋ ฅ๋จ

๐Ÿ“‚ ํด๋ž˜์Šค ์Šคํƒ€์ผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค classList์— ํด๋ž˜์Šค ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํšจ๊ณผ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ๋•Œ ์ถ”๊ฐ€ํ•  ์Šคํƒ€์ผ์€ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
ํด๋ž˜์Šค ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ํ•  ๋•Œ : add()
ํด๋ž˜์Šค ์Šคํƒ€์ผ์„ ์‚ญ์ œํ•  ๋•Œ : remove()

๐Ÿ“• add(), remove()

์š”์†Œ.classList.add(ํด๋ž˜์Šค๋ช…)
์š”์†Œ.classList.remove(ํด๋ž˜์Šค๋ช…)

add()ํ•จ์ˆ˜
์˜ˆ) add()๋ฅผ ์ด์šฉํ•ด .clicked ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด?

.clicked{
	background-color:yellow;
    color:blue;
}
const title = document.querySelector("#title");
title.onclick = () =>{
	title.classList.add("clicked")
}

๐Ÿ“• contains()

ํŠน์ • ํด๋ž˜์Šค ์Šคํƒ€์ผ์ด ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ฐพ์•„์ฃผ๋Š” contains()ํ•จ์ˆ˜

์š”์†Œ.classList.contains(ํด๋ž˜์Šค๋ช…)

contains()ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์„œ .clicked ์Šคํƒ€์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„
์—†์œผ๋ฉด .clicked๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ,
์žˆ์œผ๋ฉด .clicked๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

const title = document.querySelector("#title");
title.onclick = () =>{
	if(!title.classList.contains("clicked")){
		title.classList.add("clicked")
	} else{ 
    	title.classList.remove("clicked")
    }
}

๐Ÿ“• toggle()

ํด๋ž˜์Šค ์Šคํƒ€์ผ ํ† ๊ธ€ํ•˜๊ธฐ
ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•  ๊ฒฝ์šฐ์—๋Š”
classList์˜ toggle()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธ๋ฆฌํ•˜๋‹ค
(๊ทธ๋Ÿผ ์œ„์— ๋‚ด์š”์‘ใ„น ์™ฑ๋Ÿฌ๋ฏธใ…ใ„ด์–ด๋ฆฌใ…ใ…๋„๋ฆฌใ…)

์š”์†Œ.classList.toggle(ํด๋ž˜์Šค๋ช…)
const title = document.querySelector("#title")
title.onclick = () =>{
	title.classList.toggle("clicked");
}

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด