๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/HTML, CSS, JS

DOM API

by Jaeguk 2023. 1. 12.

DOM API ๋ž€?

Document(DOM)๋Š” HTML์„ ๋œปํ•˜๊ณ 

Object Model์€ HTML์˜ span, div, input ์š”์†Œ๋“ค์„ ๋œปํ•œ๋‹ค.

์ฆ‰, DOM API๋Š” ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ์—์„œ HTML์„ ์ œ์–ดํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ช…๋ น๋“ค์ด๋ผ๊ณ  ์˜์—ญํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ์—์„œ document ๊ฐ์ฒด์— ์žˆ๋Š” querySelector ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด HTML์˜ box ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ์ฐพ์€ ๋‹ค์Œ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์•˜๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ์ฝ”๋“œ๋ฅผ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ฝ์–ด๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ์— ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ๋จผ์ € ์‹คํ–‰์ด ๋œ๋‹ค. ๊ทธ ํ›„์— body๋ถ€๋ถ„์—์„œ div์š”์†Œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— null๊ฐ’์ด ์ถœ๋ ฅ๋œ ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ script ํƒœ๊ทธ๋ฅผ body์˜ div ํƒœ๊ทธ ์•„๋ž˜ ๋ถ€๋ถ„์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ •๋ณด์˜ ๋‚ด์šฉ์„ ๊ตฌ์กฐ์˜ ๋‚ด์šฉ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๊ทธ๋‹ค์ง€ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— defer๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์„œ HTML์ฝ”๋“œ๋ฅผ ๋‹ค ์ฝ์€ ์ƒํƒœ์—์„œ ๋‹ค์‹œ main.js ๋‚ด์šฉ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€ HTML ๋ถ€๋ถ„์˜ ๋‚ด์šฉ์„ ์ •์ƒ์ ์œผ๋กœ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด script ํƒœ๊ทธ์˜ ์œ„์น˜๋‚˜, defer ํ‚ค์›Œ๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์•„์•ผ ํ•œ๋‹ค.

 

DOM API

1. document.querySelector

document ๊ฐ์ฒด์˜ querySelector ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด HTML์˜ ์š”์†Œ ์ค‘ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ธ์ˆ˜๋กœ๋Š” ์ฐพ๊ณ ์žํ•˜๋Š” ์š”์†Œ์˜ ํŠน์„ฑ์„ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ CSS์˜ ์„ ํƒ์ž๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. addEventListener

addEventListener ๋ฉ”์†Œ๋“œ์—๋Š” 2๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ๋Š” ์ด๋ฒคํŠธ(์ƒํ™ฉ)๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ต๋ช… ํ•จ์ˆ˜๋กœ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
=> ํ•จ์ˆ˜๋ฅผ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋ฒคํŠธ์˜ ์ด๋ฆ„๋“ค์€ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์šธ ๋•Œ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

์˜ˆ์‹œ์— ์ž‘์„ฑ๋œ ๋ฉ”์†Œ๋“œ๋Š” ํด๋ฆญ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ฝ˜์†”์— Click~! ์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

3. classList.add, classList.remove

๊ฐ๊ฐ์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.

//๋ฐ•์Šค๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์š”์†Œ์—
//์•กํ‹ฐ๋ธŒ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ ํ•˜๊ฒ ๋‹ค.

//ํ•ด๋‹น ์š”์†Œ์˜ ํด๋ž˜์Šค ๋ฆฌ์ŠคํŠธ์— ์•กํ‹ฐ๋ธŒ๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ๋‹ค.
//๋ฐ•์Šค๋ผ๋Š” ํด๋ž˜์Šค๋ฅด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์š”์†Œ์—์„œ
//์•กํ‹ฐ๋ธŒ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ œ๊ฑฐํ•˜๊ฒ ๋‹ค.
 
 
 
4. document.querySelectorAll, forEach
 
์š”์†Œ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•˜๊ธฐ

document.querySelector ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ๋‹ค๋ฉด document.querySelectorAll ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ธ์ˆ˜๋กœ๋Š” ์ฐพ์€ ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ต๋ช… ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.

์ต๋ช… ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ํ˜„์žฌ ๋ฐ˜๋ณต ์ค‘์ธ ์š”์†Œ๋ฅผ ๋ฐ›์•„๋ณผ ์ˆ˜ ์žˆ๊ณ , ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๋Š” ๋ฐ˜๋ณต ์ค‘์ธ ์š”์†Œ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋Š” zero-based numbering์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆํ˜ธ๋Š” 0๋ฒˆ๋ถ€ํ„ฐ ๋งค๊ฒจ์ง„๋‹ค.

๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ง๊ด€์ ์œผ๋กœ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

forEach ๋ฉ”์†Œ๋“œ๋ฅผ ์ ์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด  ํด๋ž˜์Šค๊ฐ€ box์ธ ์š”์†Œ๋ฅผ 4๊ฐœ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  forEach ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ ์š”์†Œ์— ์ ‘๊ทผํ•˜์—ฌ classList์— order-index + 1 ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๊ณ , ์ฝ˜์†”์— ์ถœ๋ ฅํ•ด๋ณธ ๊ฒฐ๊ณผ ์ž˜ ์ ์šฉ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

CSS๋‚˜ HTML์—์„œ๋Š” zero-based numbering์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ˆซ์ž๋ฅผ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

5. textContent ์†์„ฑ

์š”์†Œ์— ๋“ค์–ด์žˆ๋Š” ๋‚ด์šฉ ์ค‘ text๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋‚ด์šฉ๋งŒ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” DOM API์ด๋‹ค.

textContent ์†์„ฑ์€ ๊ฐ’์„ ์–ป๋Š” ์šฉ๋„์™€, ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ์šฉ๋„ ๋‘ ๊ฐ€์ง€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

 

728x90

'๊ฐœ๋ฐœ > HTML, CSS, JS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BEM  (0) 2023.01.13
๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹(Method Chaining)  (0) 2023.01.12
ํ•จ์ˆ˜  (0) 2023.01.11
๋ณ€์ˆ˜, ์˜ˆ์•ฝ์–ด  (0) 2023.01.11
๋ฐ์ดํ„ฐ ์ข…๋ฅ˜(์ž๋ฃŒํ˜•)  (0) 2023.01.11