๐Ÿƒโ€โ™€๏ธ [์—˜๋ฆฌ์Šค AI ํŠธ๋ž™ 4๊ธฐ] #08

DOM๊ณผ ์ด๋ฒคํŠธ ์†Œ๊ฐœ


01. DOM์ด๋ž€?

๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ (Document Object Model)

โ†’ ๊ฐ์ฒด ์ง€ํ–ฅ ๋ชจ๋ธ๋กœ์จ ๊ตฌ์กฐํ™” ๋œ ๋ฌธ์„œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹

DOM์˜ ์ข…๋ฅ˜

  • Core DOM
    โ†’ ๋ชจ๋“  ๋ฌธ์„œ ํƒ€์ž…์„ ์œ„ํ•œ DOM ๋ชจ๋ธ

  • HTML DOM
    โ†’ HTML ๋ฌธ์„œ๋ฅผ ์œ„ํ•œ DOM ๋ชจ๋ธ
    ๋ชจ๋“  HTML ์š”์†Œ๋Š” HTML DOM์„ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ

  • XML DOM
    โ†’ ๋ฌธ์„œ๋ฅผ ์œ„ํ•œ DOM ๋ชจ๋ธ

DOCUMENT

  • DOCUMENT ๊ฐ์ฒด
    โ†’ ์›น ํŽ˜์ด์ง€๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์›น ํŽ˜์ด์ง€์— ์กด์žฌํ•˜๋Š” HTML ์š”์†Œ์—
    ์ ‘๊ทผํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ Document ๊ฐ์ฒด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

  • DOCUMENT ๋ฉ”์†Œ๋“œ
    โ†’ HTML ์š”์†Œ์™€ ๊ด€๋ จ๋œ ์ž‘์—…์„ ๋„์™€์ฃผ๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ ์ œ๊ณต
    HTML ์š”์†Œ์˜ ์„ ํƒ
    HTML ์š”์†Œ์˜ ์ƒ์„ฑ
    HTML ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€
    HTML ๊ฐ์ฒด์˜ ์„ ํƒ

    HTML ์š”์†Œ์˜ ์„ ํƒ
    document.getElementById() : ์•„์ด๋””์˜ ์š”์†Œ๋ฅผ ์„ ํƒ
    document.getElementsByClassName() : ํด๋ž˜์Šค์— ์†ํ•œ ์š”์†Œ๋ฅผ ์„ ํƒ
    document.getElementByName() : ํ•ด๋‹น name ์†์„ฑ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์š”์†Œ ์„ ํƒ
    document.querySelectorAll() : ํ•ด๋‹น ์„ ํƒ์ž๋กœ ์„ ํƒ๋˜๋Š” ์š”์†Œ๋ฅผ ๋ชจ๋‘ ์„ ํƒ
    document.querySelector() : ํ•ด๋‹น ์„ ํƒ์ž๋กœ ์„ ํƒ๋˜๋Š” ์š”์†Œ๋ฅผ ์„ ํƒ

    HTML ์š”์†Œ์˜ ์ƒ์„ฑ
    document.createElement() : ์ง€์ •๋œ HTML ์š”์†Œ๋ฅผ ์ƒ์„ฑ
    document.getElementsByClassName() : HTML ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅ

DOM์˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ

02. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ DOM

DOM ์š”์†Œ์˜ ์„ ํƒ

// HTML <li> ์š”์†Œ๋ฅผ ์„ ํƒ
let selectedItem = document.getElementsByTagName("li");
// ์•„์ด๋””๊ฐ€ "id"์ธ ์š”์†Œ๋ฅผ ์„ ํƒ
let selectedItem = document.getElementById("id");
// ํด๋ž˜์Šค๊ฐ€ "odd"์ธ ์š”์†Œ๋ฅผ ์„ ํƒ
let selectedItem = document.getElementsByClassName("odd");
// name ์†์„ฑ ๊ฐ’์ด "first"์ธ ์š”์†Œ๋ฅผ ์„ ํƒ
let selectedItem = document.getElementsByName("first");

DOM ์š”์†Œ์˜ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ

// ์•„์•„๋””๊ฐ€ "even"์ธ ์š”์†Œ๋ฅผ ์„ ํƒ
let selectedItem = document.getElementById("even");
// ์„ ํƒ๋œ ์š”์†Œ์˜ ํ…์ŠคํŠธ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝ
selectedItem.style.color = "purple";

DOM ์š”์†Œ์˜ ๋‚ด์šฉ ๋ณ€๊ฒฝ

// ์•„์ด๋””๊ฐ€ "text"์ธ ์š”์†Œ๋ฅผ ์„ ํƒ
let str = document.getElementById("text");
// ์„ ํƒ๋œ ์š”์†Œ์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝ
str.innerHTML = "์š”์†Œ์˜ ๋‚ด์šฉ ๋ณ€๊ฒฝ";

03. Node ๊ฐ์ฒด

๋…ธ๋“œ(Node) ์™€ ๋…ธ๋“œ ํŠธ๋ฆฌ

HTML DOM์—์„œ ์ •๋ณด๋ฅผ ์ €์ •ํ•˜๋Š” ๊ณ„์ธต์  ๋‹จ์œ„
โ†’ ๋…ธ๋“œ ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ, ๋…ธ๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
โ†’ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” HTML DOM์„ ์ด์šฉํ•˜์—ฌ ๋…ธ๋“œ ํŠธ๋ฆฌ์— ํฌํ•จ๋œ ๋ชจ๋“  ๋…ธ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋…ธ๋“œ ๊ฐ„์˜ ๊ด€๊ณ„

โ†’ ๋…ธ๋“œํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์„œ๋กœ ๊ณ„์ธต์  ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋‹ค.

๋…ธ๋“œ์˜ ์ข…๋ฅ˜

  • ๋ฌธ์„œ ๋…ธ๋“œ (document Node)
    โ†’ HTML ๋ฌธ์„œ ์ „์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ

  • ์š”์†Œ ๋…ธ๋“œ (element Node)
    โ†’ ๋ชจ๋“  HTML ์š”์†Œ๋Š” ์š”์†Œ ๋…ธ๋“œ์ด๋‹ค.
    ์†์„ฑ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋…ธ๋“œ

  • ์ฃผ์„ ๋…ธ๋“œ (comment Node)
    HTML ๋ฌธ์„œ์˜ ๋ชจ๋“  ์ฃผ์„์€ ์ฃผ์„ ๋…ธ๋“œ์ด๋‹ค.

  • ์†์„ฑ ๋…ธ๋“œ (attribute Node)
    โ†’ ๋ชจ๋“  HTML ์š”์†Œ์˜ ์†์„ฑ์€ ์†์„ฑ ๋…ธ๋“œ์ด๋ฉฐ, ์š”์†Œ ๋…ธ๋“œ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹๋…ธ๋“œ (child node) ์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ํ…์ŠคํŠธ ๋…ธ๋“œ (text Node)
    HTML ๋ฌธ์„œ์˜ ๋ชจ๋“  ํ…์ŠคํŠธ๋Š” ํ…์ŠคํŠธ ๋…ธ๋“œ์ด๋‹ค.

๋…ธ๋“œ์˜ ๊ฐ’

๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
nodeName(์ด๋ฆ„), nodeValue(๊ฐ’), nodeType(ํƒ€์ž…)

// HTML ๋ฌธ์„œ์˜ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ ์ค‘์—์„œ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ์˜ ์ด๋ฆ„์„ ์„ ํƒ
document.childNodes[0].nodeName;
// ์•„์ด๋””๊ฐ€ "heading"์ธ ์š”์†Œ์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ์˜ ๋…ธ๋“œ๊ฐ’์„ ์„ ํƒ
document.getElementById("heading").firstChild.nodeValue;
// ์•„์ด๋””๊ฐ€ "heading"์ธ ์š”์†Œ์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ์˜ ํƒ€์ž…์„ ์„ ํƒ
document.getElementById("heading").firstChild.nodeType;

04. ์ด๋ฒคํŠธ(Event)

์ด๋ฒคํŠธ(Event)๋ž€ ?

โ†’ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” HTML ์š”์†Œ์— ๋Œ€ํ•œ ์‚ฌ๊ฑด์˜ ๋ฐœ์ƒ.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜์—ฌ ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒคํŠธ ํƒ€์ž…

๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ ์ข…๋ฅ˜ (ํผ, ํ‚ค๋ณด๋“œ, HTML DOM, Window ๊ฐ์ฒด ๋“ฑ)

// ๋งˆ์šฐ์Šค ํด๋ฆญ ์ด๋ฒคํŠธ ์˜ˆ์‹œ
<p onclick="changeText(this)"> ์—ฌ๊ธธ ํด๋ฆญํ•˜์„ธ์š”! </p>
<script>
  function changeText(element) {
  	element.innerHTML = "๋‚ด์šฉ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค";
  }
</script>

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ทธ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜
์ง€์ •๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ทธ ์š”์†Œ์—
๋“ฑ๋ก๋œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

// HTML ๋ฌธ์„œ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ์‹คํ–‰๋จ.
window.onload = function() {
  //์•„์ด๋””๊ฐ€ "text"์ธ ์š”์†Œ๋ฅผ ์„ ํƒํ•จ.
  let text = document.getElementById("text");
  text.innerHTML = "HTML ๋ฌธ์„œ๊ฐ€ ๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.";

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ