DOM ๋…ธ๋“œ์— ๋Œ€์‘ํ•˜๋Š” ํด๋ž˜์Šค

2025. 9. 22. 23:03ใ†Front-end/JavaScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

1. DOM ๋…ธ๋“œ ํด๋ž˜์Šค

2. DOM ๋…ธ๋“œ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ํ”„๋กœํผํ‹ฐ


1. DOM ๋…ธ๋“œ ํด๋ž˜์Šค

DOM ๋…ธ๋“œ๋Š” ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๊ฐ๊ฐ ๋‹ค๋ฅธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํƒœ๊ทธ <a>์— ๋Œ€์‘ํ•˜๋Š” ์š”์†Œ ๋…ธ๋“œ๋Š” ๋งํฌ์™€ ๊ด€๋ จ๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ,

<input>์— ๋Œ€์‘ํ•˜๋Š” ์š”์†Œ ๋…ธ๋“œ๋Š” ์ž…๋ ฅ ๊ด€๋ จ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

๋˜ํ•œ DOM ๋…ธ๋“œ๋Š” ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋Œ€์‘ํ•˜๋Š” ๋‚ด์žฅ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅด๋‹ค.

 

๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ ๊ณตํ†ต์ ์œผ๋กœ ์œ„์™€ ๊ฐ™์€ ์ƒ์† ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ํด๋ž˜์Šค ์—ญ์‹œ ์ƒ์†ํ•œ๋‹ค.

๊ฐ ํด๋ž˜์Šค์˜ ํŠน์ง•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • EventTarget : ๋ฃจํŠธ์— ์žˆ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋กœ, ๋Œ€์‘ ํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์Œ
  • Node : DOM ๋…ธ๋“œ์˜ ๋ฒ ์ด์Šค ์—ญํ• ์„ ํ•˜๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ฃผ์š” ํŠธ๋ฆฌ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  • Element : DOM ์š”์†Œ๋ฅผ ์œ„ํ•œ ๋ฒ ์ด์Šค ํด๋ž˜์Šค๋กœ, getElementsByTagName ๋“ฑ๊ณผ ๊ฐ™์ด ์š”์†Œ ์ „์šฉ ํƒ์ƒ‰์„ ๋•๋Š”
                      ํ”„๋กœํผํ‹ฐ/๋ฉ”์„œ๋“œ๊ฐ€ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.
  • HTMLElement : HTML ์š”์†Œ ๋…ธ๋“œ์˜ ๋ฒ ์ด์Šค ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๋กœ, ์•„๋ž˜์˜ ํด๋ž˜์Šค๋“ค์ด ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.
    • HTMLInputElement - <input>
    • HTMLBodyElement - <body>
      HTMLAnchorElement
      - <a>

 

์ƒ์† ๊ด€๊ณ„ ์—์‹œ๋ฅผ ๋“ค๋ฉด,

document.body๋Š” HTMLBodyElement ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋ฉฐ,

HTMLElement → Element → Node → EventTarget ์ˆœ์œผ๋กœ ์ƒ์†๋œ๋‹ค.


2. DOM ๋…ธ๋“œ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ํ”„๋กœํผํ‹ฐ

DOM ๋…ธ๋“œ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํผํ‹ฐ๋“ค์ด ์žˆ๋‹ค

ํ”„๋กœํผํ‹ฐ ์—ญํ•  ํŠน์ง• / ์˜ˆ์‹œ
nodeType ๋…ธ๋“œ ํƒ€์ž… ํ™•์ธ ⋅ ์ •์ˆ˜๊ฐ’ ๋ฐ˜ํ™˜ (์š”์†Œ: 1, ํ…์ŠคํŠธ: 3, ๋ฌธ์„œ: 9 ...)
 ์ฝ๊ธฐ ์ „์šฉ
let a = document.body;
   alert(a.nodeType);    // 1
nodeName /
tagName
ํƒœ๊ทธ ์ด๋ฆ„ ํ™•์ธ tagName์€ ์š”์†Œ ๋…ธ๋“œ๋งŒ ์กด์žฌ
nodeName์€ ๋ชจ๋“  ๋…ธ๋“œ์— ์กด์žฌ
⋅ alert(document.body.nodeName);    // BODY
   alert(document.body.tagName);    // BODY
innerHTML ์š”์†Œ ๋‚ด์˜ HTML์„ ๋ฌธ์ž์—ด๋กœ ์ฝ๊ฑฐ๋‚˜,
HTML ์ฝ”๋“œ๋กœ ์„ค์ •ํ•˜์—ฌ
์š”์†Œ ๋‚ด๋ถ€ ๋‚ด์šฉ ์ˆ˜์ • ๊ฐ€๋Šฅ
'+='๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”์†Œ์— HTML์„ ๋ฎ์–ด ์“ธ ์ˆ˜ ์žˆ์Œ
document.body.innerHTML = "์ƒˆ๋กœ์šด BODY ๋‚ด์šฉ";
chatDiv.innerHTML += "<div>์•ˆ๋…•ํ•˜์„ธ์šฉ</div>

outerHTML ์š”์†Œ ์ž์‹ ์˜ ํƒœ๊ทธ
+ ๋‚ด๋ถ€ HTML ์ „์ฒด๋ฅผ ํฌํ•จํ•œ HTML ๋ฌธ์ž์—ด
์š”์†Œ ์ „์ฒด ๊ต์ฒด ๊ฐ€๋Šฅ
๋ฌธ์„œ ๋‚ด ์š”์†Œ๋Š” ๋ฐ”๋€Œ๋‚˜, ์ฐธ์กฐํ•œ ๊ฐ์ฒด(element)๋Š” ๋™์ผํ•˜์ง€ ์•Š์Œ
ํ• ๋‹นํ•œ HTML ์กฐ๊ฐ์€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ธฐ์กด ๊ฐ์ฒด๊ฐ€ ์—ฌ์ „ํžˆ ๋‚จ์•„์žˆ์Œ
<div id="elem">...
   alert(elem.outerHTML);  // <div id="elem">...
nodeValue /
data
์š”์†Œ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ (ํ…์ŠคํŠธ, ์ฃผ์„ ๋…ธ๋“œ)์˜
๋‚ด์šฉ์„ ์ฝ๊ณ  ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉ
data๊ฐ€ ์กฐ๊ธˆ๋” ๊ฐ„๊ฒฐ
let text = document.body.firstChild;
   alert(text.data);    // body์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ
textContent ์š”์†Œ ๋‚ด๋ถ€์˜ '์ˆœ์ˆ˜ ํ…์ŠคํŠธ'๋งŒ ์ฝ๊ฑฐ๋‚˜ ์”€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์€ HTML ๋ณด์•ˆ ์ธก๋ฉด์—์„œ textContent๊ฐ€ ์•ˆ์ „ํ•จ
<div id="news"><p>ใ…‹ใ…‹<p/><span>์™ธ๊ณ„์ธ</span>
   alert(news.textContent);    // ใ…‹ใ…‹ ์™ธ๊ณ„์ธ
hidden ์š”์†Œ ๋ณด์ด๊ธฐ/์ˆจ๊ธฐ๊ธฐ ์„ค์ •
hidden = true๋Š” display: none๊ณผ ์œ ์‚ฌ
 CSS ์Šคํƒ€์ผ display: none๊ณผ ์‚ฌ์‹ค์ƒ ๊ฐ™์€ ๋™์ž‘
 ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์‹œ ๊ฐ€์‹œ์„ฑ์— ์˜ํ–ฅ์„ ์คŒ
⋅ setInterval(()=> elem.hidden = !elem.hidden, 1000);    // ๊นœ๋ฐ•๊นœ๋ฐ•

 

 

 

 

 

 

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•