๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/๊ตญ๋น„์ง€์›

[D+40] ๋ฌธ์„œ-๊ฐ์ฒด ๋ชจ๋ธ DOM

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2022. 11. 16.

 

 

๊ตญ๋น„์ง€์› D+40

-  ๋ฌธ์„œ-๊ฐ์ฒด ๋ชจ๋ธ DOM -

 


 

์›น๋ธŒ๋ผ์šฐ์ €๋Š” ํฌ๊ฒŒ browsing-system๊ณผ ์ •๋ณด๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ง•์‹œ์Šคํ…œ์€ ํ•ญ์ƒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค.

์ •๋ณด๋Š” HTML์—์„œ๋Š” Document๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ ๋ฌธ์„œ-๊ฐ์ฒด๋ชจ๋ธ DOM์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ DOM

• Object Model

Object Model์€ 3๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ DOM, BOM, JS์ด๋‹ค.

DOM ์ž์„ธํžˆ ์•Œ๊ธฐ์ „์— ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ๋“ค์ด ์–ด๋– ํ•œ ๊ฐ์ž ์–ด๋–ค ์—ญํ• ์„ ํ•˜๊ณ ์žˆ๋Š”์ง€์™€ Objectํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ ์žˆ์–ด์•ผ ์ดํ•ดํ•˜๊ธฐ ํŽธํ•˜๋‹ค.

 

• DOM

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ํŽ˜์ด์ง€์— ์žˆ๋Š” Element๋“ค์„ ํŠธ๋ฆฌํ˜•์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉํ•œ๋‹ค.

์ด๋•Œ์˜ ๊ฐ ๋…ธ๋“œ๋“ค์„ document object๋ผ๊ณ  ํ•œ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์„œ๊ฐ์ฒด๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก API(๋ฐ์ดํ„ฐ+๊ธฐ๋Šฅ)์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด๋ฅผ ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ (DOM)์ด๋ผ๊ณ  ํ•œ๋‹ค.

javascript๋Š” DOM์„ ํ˜ธ์ถœ/์ œ์–ด ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ์–ธ์–ด์ด๋‹ค.

 

• DOMContentLoaded ์ด๋ฒคํŠธ

JS๋Š” ์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ์ฝ์–ด๋‚ด๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— body์—˜๋ฆฌ๋จผํŠธ์•ˆ์— ํƒœ๊ทธ๋“ค์„ ์ฝํžˆ๊ณ  ๋‚˜์„œ script๊ฐ€ ์‹คํ–‰๋˜์—ˆ์„ ๊ฒฝ์šฐ์—” script๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž˜ ์ž‘๋™๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ script๊ฐ€ ์ƒ๋‹จ์— head์—˜๋ฆฌ๋จผํŠธ์— ์œ„์น˜ํ–ˆ์„ ๊ฒฝ์šฐ body์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฝ์–ด๋‚ด๊ธฐ ์ „์ด๊ธฐ ๋•Œ๋ฌธ์— script์—์„œ body์— ๊ด€ํ•œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

script๋ฅผ head์— ๋„ฃ์–ด๋„ ์ •์ƒ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ DOMContentLoaded๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ดˆ๊ธฐ HTML ๋ฌธ์„œ๋ฅผ ์™„์ „ํžˆ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๋ถ„์„ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋กœ ๋ฌธ์„œ๊ฐ€ ์™„์ „ํ•˜๊ฒŒ ๋กœ๋”ฉ๋˜๊ณ  ๋‚œ ํ›„์— script๊ฐ€ ๋Œ๊ฐ€๊ฐ€๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

• ๋ฌธ์„œ๊ฐ์ฒด ์„ ํƒ - querySelector

document.head	// ์ƒ์œ„์— ์žˆ๋Š” head element ๊ฐ€์ ธ์™€
document.body	// ์ƒ์œ„์— ์žˆ๋Š” body element ๊ฐ€์ ธ์™€
document.title	// ์ƒ์œ„์— ์žˆ๋Š” title element ๊ฐ€์ ธ์™€

๋ฌธ์„œ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ์ƒ์œ„์— ์žˆ๋Š” ๋ฌธ์„œ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ document.์—˜๋ฆฌ๋จผํŠธ ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋ฌธ์„œ ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

document.querySelector('h1');		// ํƒœ๊ทธ๊ฐ€ h1์ธ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ€์ ธ์™€
document.querySelector('#name');	// id๊ฐ€ name์ธ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ€์ ธ์™€

document.querySelectorAll('.name');	// class๋ช…์ด name์ธ ์—˜๋ฆฌ๋จผํŠธ๋“ค ๋‹ค ๊ฐ€์ ธ์™€

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ์ƒ์œ„์˜ ๋ฌธ์„œ ๊ฐ์ฒด๋ฅผ ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํŠน์ • ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ querySelector๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

querySelector๋Š” ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ์„ ํƒ์ž ์ค‘์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ฌธ์„œ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ ๋ชจ๋“  ๋ฌธ์„œ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด querySelectorAll์„ ์‚ฌ์šฉํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€