๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โž• Language/โ–น Java Script

6. DOM

by Ardor924 2025. 5. 23.

DOM

๐Ÿ”ถ ๋ Œ๋”๋ง
โ—ป Parsing

  • HTML๊ณผ CSSํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ ๊ฐ๊ฐ DOM Tree๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…
    โ—ป Style
  • ๋‘ Tree๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ Rendering Tree๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…
    โ—ป Layout
  • Rendering Tree ์—์„œ ๊ฐ ๋…ธ๋“œ์˜ ์ด์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ž‘์—…
    โ—ป Paint
  • Layout์—์„œ ๊ณ„์‚ฐ๋œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ ๋…ธ๋“œ๋ฅผ ํ”ฝ์…€๋กœ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…
    โ—ป Composite
  • ๊ทธ๋ ค์ง„ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋ฅผ ํ•ฉ์ณ ์ตœ์ข… ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ž‘์—…

๐Ÿ”ถ DOM (Document Object Model)
โ—ป ๊ฐœ๋…

  • ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ชผ๊ฐœ๋Š”๊ฒƒ
  • ์›นํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ  ๊ตฌ์กฐ ์Šคํƒ€์ผ ์š”์†Œ๋ฅผ ๊ตฌ์กฐํ™” ํ•˜์—ฌ ์š”์†Œ์•  ์ ‘๊ทผ๋ฐ ์กฐ์ž‘์„ ํ• ์ˆ˜์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” Web API

โ—ป ๊ตฌ์กฐ
![[Screenshot_380.png]]

๐Ÿ”ถ ์š”์†Œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•
โ—ป Document
โ—ฝ๊ฐœ๋… : ์›นํŽ˜์ด์ง€ ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๋กœ HTML์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ์ ‘๊ทผ ํ•ด์•ผ ํ•˜๋Š” ์š”์†Œ
โ—ฝํŠน์ง• : DOM์‹คํ–‰์‹œ ์ฒซ๋ฒˆ์งธ ๋กœ ์ ‘๊ทผํ•ด์•ผํ•œ๋‹ค.
โ—ฝ์ž์ฃผ์‚ฌ์šฉํ•˜๋Š” ์š”์†Œ ์ ‘๊ทผ ์ข…๋ฅ˜
![[Screenshot_381.png]]

์˜ˆ์‹œ1
โ—ปid์†์„ฑ ํ…์ŠคํŠธ ์ถœ๋ ฅํ•˜๊ธฐ
html

<body>
โ€‹โ€‹โ€‹โ€‹<h1 id="h1Tag">DOM ์‚ฌ์šฉํ•˜๊ธฐ</h1>
โ€‹โ€‹โ€‹โ€‹<ul>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>HTML</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>CSS</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>JS</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>Java</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>Python</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>Ruby</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>Kotlin</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>C#</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>C++</li>
โ€‹โ€‹โ€‹โ€‹</ul>
</body>

js

let h1Element = document.getElementById('h1Tag')
console.log(h1Element.textContent)

console(browser)
![[Screenshot_384.png]]

์˜ˆ์‹œ2
โ—ป ๋ฐฐ์—ด๋ฐ์ดํ„ฐ ํ•œ๋ฒˆ์— ์ถœ๋ ฅํ•˜๊ธฐ( querySelectAll() )

html

<body>
โ€‹โ€‹โ€‹โ€‹<h1 id="h1Tag">DOM ์‚ฌ์šฉํ•˜๊ธฐ</h1>
โ€‹โ€‹โ€‹โ€‹<ul>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>HTML</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>CSS</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>JS</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>Java</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>Python</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>Ruby</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>Kotlin</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>C#</li>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<li>C++</li>
โ€‹โ€‹โ€‹โ€‹</ul>
</body>

js

let liElements = document.querySelectorAll('li')
console.log(liElements)
for(let i=0;i<liElements.length;i++){
โ€‹โ€‹โ€‹โ€‹console.log(liElements[i].textContent)
}

console(browser)
![[Screenshot_383.png]]

์˜ˆ์‹œ3
โ—ปinput์— Name ์†์„ฑ์œผ๋กœ ํ…์ŠคํŠธ ์ถœ๋ ฅํ•˜๊ธฐ

html

<body>
โ€‹โ€‹โ€‹โ€‹<input type="text" name="prac" value="ํ™•์ธ1">
โ€‹โ€‹โ€‹โ€‹<input type="text" name="prac" value="ํ™•์ธ2">
</body>

js

// input์— name์„ ํ†ตํ•ด์„œ ์š”์†Œ์— ์ ‘๊ทผ
let input_name = document.getElementsByName('prac')
// // ์‹ค์Šต ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ input ๋‚ด์˜ ๊ฐ’๋“ค์„ ์ถ”์ถœํ•˜๊ธฐ
for(let i=0;i<input_name.length;i++){
โ€‹โ€‹โ€‹โ€‹console.log("res"+i+" : "+input_name[i].value)
}

console(browser)
![[Screenshot_389.png]]

์˜ˆ์‹œ4
โ—ป CSS์„ ํƒ์ž๋ฅผ ํ†ตํ•ด ํ…์ŠคํŠธ ์ถœ๋ ฅํ•˜๊ธฐ ( querySelector() )
html

<body>
โ€‹โ€‹โ€‹โ€‹โ€‹<span id="span_id">๋ณธ๋ฌธ๋‚ด์šฉํ™•์ธ</span>
</body>

js

// ํ•ด๋‹น๋œ ์„ ํƒ์ž ์š”์†Œ 1๊ฐœ๋ฅผ ๋ฐ˜ํ™˜
let span_id = document.querySelector("#span_id")
console.log(span_id.innerText)

console(browser)
![[Screenshot_390.png]]

โ—ป ์š”์†Œ ํ…์ŠคํŠธ ์ถœ๋ ฅ ํ•จ์ˆ˜ ์ฐจ์ด
โ—ฝ innerText

  • ์š”์†Œ๋‚ด์˜ ํ…์ŠคํŠธ๋งŒ ์ถ”์ถœ
    โ—ฝ innerHTML
  • ์š”์†Œ ์ „์ฒด๋ฅผ ์ถœ๋ ฅ(ํƒœ๊ทธ + ๋ฌธ์ž)

html

<h1 id="tit">
โ€‹โ€‹โ€‹โ€‹<span>์˜ค๋Š˜ <strong>๋‚ ์”จ๊ฐ€ ๋ฅ๋‹ค</strong> </span>
</h1>

js

console.log(tit.innerText);
console.log(tit.innerHTML);

console
![[Screenshot_392.png]]

๐Ÿ”ถ ์š”์†Œ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•
![[Screenshot_391.png]]

โ—ป 1. ์š”์†Œ์ ‘๊ทผ

let tit = document.getElementById('tit');

โ—ป 2-1. ์š”์†Œ์ ‘๊ทผํ›„ ๋ณ€๊ฒฝ

// 2-1 ํ…์ŠคํŠธ์ถ”์ถœ
tit.innerText = '<a href="#">DOM ๋ฐฐ์šฐ๋Š” ์ค‘</a>';
// 2-2 html ์ถ”์ถœ
tit.innerHTML = '<a href="https://www.naver.com">DOM ๋ฐฐ์šฐ๋Š” ์ค‘</a>';

โ—ป 3-1 ๊ฒฐ๊ณผ
![[Screenshot_393.png]]

โ—ป 2-2. ์š”์†Œ์ ‘๊ทผํ›„ ๋ณ€๊ฒฝ

// 2-2 html ์ถ”์ถœ
tit.innerHTML = '<a href="https://www.naver.com">DOM ๋ฐฐ์šฐ๋Š” ์ค‘</a>';

โ—ป 3-2 ๊ฒฐ๊ณผ
![[Screenshot_394.png]]

---> innerText๋กœ ๋ณ€๊ฒฝ์‹œ ํ…์ŠคํŠธ ์ž์ฒด๋กœ ๋ณ€๊ฒฝ๋˜์–ด ํƒœ๊ทธ์ด์šฉ x
---> innerHTML๋กœ ๋ณ€๊ฒฝ์‹œ ํƒœ๊ทธํฌํ•จ ์ „์ฒด html๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

โ—ป ์‹ค์Šต1
๋ฒ„ํŠผ์„ ํด๋ฆญ์‹œ, ์ˆซ์ž๋ฅผ ์ฆ๊ฐ์‹œํ‚ค๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„

html

<body>
โ€‹โ€‹โ€‹โ€‹<div class="w-80 border">
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<h1 id="num">0</h1>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<button class="btn btn-success" onclick="increase()">์ฆ๊ฐ€</button>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<button class="btn btn-danger" onclick="decrease()">๊ฐ์†Œ</button>
โ€‹โ€‹โ€‹โ€‹</div>
</body>

js

// ๋ฒ„ํŠผ์„ ํด๋ฆญ์‹œ, ์ˆซ์ž๋ฅผ ์ฆ๊ฐ์‹œํ‚ค๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„
const increase = () => {
โ€‹โ€‹โ€‹โ€‹console.log("increase func run")
โ€‹โ€‹โ€‹โ€‹let num = document.getElementById("num")
โ€‹โ€‹โ€‹โ€‹num.innerHTML = parseInt(num.innerHTML) +1
}
const decrease = () => {
โ€‹โ€‹โ€‹โ€‹console.log("decrease func run")
โ€‹โ€‹โ€‹โ€‹let num = document.getElementById("num")
โ€‹โ€‹โ€‹โ€‹num.innerHTML = parseInt(num.innerHTML) -1
}

view
![[Screenshot_397.png]]

โ—ป ์‹ค์Šต2
๋ฒ„ํŠผ์„ ํด๋ฆญ์‹œ, ์ˆซ์ž๋ฅผ ์ฆ๊ฐ์‹œํ‚ค๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„

html

<body>
โ€‹โ€‹โ€‹โ€‹<div class="container">
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<div class="form-group">
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<input type="text" id="inputTag" class="form-control" placeholder="์ž…๋ ฅ ํ•„๋“œ 1">
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<button class="btn btn-black mt-2" onclick="showAlert()">ํด๋ฆญ</button>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹</div>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<div class="form-group">
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<input type="text" id="inputTag2" class="form-control" placeholder="์ž…๋ ฅ ํ•„๋“œ 2">
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹<button class="btn btn-orange mt-2" onclick="showInputText()" >ํด๋ฆญ</button>
โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹</div>
โ€‹โ€‹โ€‹โ€‹</div>
</body>

js

let showAlert = () =>{
โ€‹โ€‹โ€‹โ€‹let inputTag = document.getElementById("inputTag")
โ€‹โ€‹โ€‹โ€‹alert(inputTag.value)
}
let showInputText = () =>{
โ€‹โ€‹โ€‹โ€‹let inputTag2 = document.getElementById("inputTag2")
โ€‹โ€‹โ€‹โ€‹document.write(`<h1> ${inputTag2.value}</h1>`)
}

view
![[Screenshot_402.png]]

![[Screenshot_403.png]]

![[Screenshot_404.png]]

'โž• Language > โ–น Java Script' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

7. ์ด๋ฒคํŠธ  (0) 2025.05.29
5. ๊ฐ์ฒด  (2) 2025.05.22
4. ํ•จ์ˆ˜  (0) 2025.05.22
3. ๋ฐ˜๋ณต๋ฌธ  (1) 2025.05.21
2. ์กฐ๊ฑด๋ฌธ  (1) 2025.05.21