๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DEV

DOM & EVENT

by camille: 2024. 10. 20.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“• DOM์ด๋ž€?

Document Object Model์˜ ์•ฝ์ž์ด๋ฉฐ, ์ง์—ญํ•ด๋ณด์ž๋ฉด ๋ฌธ์„œ์˜ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์„œ์˜ ๊ฐ์ฒด๋Š” html์ด๋‚˜ body ๊ฐ™์€ html๋ฌธ์„œ์˜ ํƒœ๊ทธ๋“ค์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • HTML : ์›นํŽ˜์ด์ง€ ํ…์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ธฐ๋ณธ ํ† ๋Œ€๊ฐ€๋˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • CSS : HTML๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ์Šคํƒ€์ผ๋งํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • JS : ๋™์ ์ธ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๐Ÿ“– ์™œ ๋™์ ์ธ ๊ตฌ์„ฑ์„ ์œ„ํ•ด JS๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๊ฑธ๊นŒ?

CSS,HTML์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜๊ฐ€ ์—†๋Š”๋ฐ, JS๋Š” ๋…ผ๋ฆฌ์  ๋กœ์ง์„ ์งค ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“• DOM TREE


ํŠธ๋ฆฌ๊ตฌ์กฐ ๋”์ด๋ผ๋Š” ๊ฒƒ์ด ๊ฐ์ฒด์— ์ ‘๊ทผ์„ ํ•˜๋Š”๋ฐ,

์›นํŽ˜์ด์ง€ HTML์„ ๊ณ„์ธตํ™”์‹œ์ผœ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ๋งŒ๋“  ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ฉฐ, JS๊ฐ€ ๋ชจ๋ธ๋กœ ์›นํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๊ณ , ํŽ˜์ด์ง€๋ฅผ ์ˆ˜์ •ํ•ด์ค€๋‹ค. HTML์ธ์›นํŽ˜์ด์ง€์™€ JS์ž‡๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๐Ÿ“Œ ์ฃผ๋กœ ์“ฐ์ด๋Š” HTML DOM Methods

  • getElementsById : HTML์˜ id์š”์†Œ์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • innerHTML : HTML ์š”์†Œ์˜ ๋‚ด์šฉ์„ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • addEventListener : ์š”์†Œ์˜ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฐ˜์‘์„ ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.


์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ style๋„ ์‰ฝ๊ฒŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด backgroundColor๋ฅผ ์ง์ ‘ ๋ฐ”๊ฟ”์ค„ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ ์šฉ๋œ ์ด๋ฏธ์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.


์ด๋Ÿฐ์‹์œผ๋กœ backgroundColor๋ฅผ ์ด์šฉํ•ด์„œ ๋งˆ์ผ“์ปฌ๋ฆฌ์˜ ๋ฐฐ๊ฒฝ์ƒ‰์„ green์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.

๐Ÿ“™ EVENT๋ž€?

๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ํ•„์š”ํ•œ ์›น์‚ฌ์ดํŠธ๊ฐ€ ๋งŽ์•„์ง€๋ฉด์„œ ์ธํ„ฐ๋ ‰์…˜์ด ํ•„์š”ํ•œ ์ผ์ด ๋งŽ์•„์กŒ๊ณ , ์ธํ„ฐ๋ ‰์…˜์„ HTML, CSS๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ์ œํ•œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— Javascript๊ฐ€ ๋Œ€๋‘ ๋˜์—ˆ๋‹ค. Javascript๋ฅผ ์ด์šฉํ•ด ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์–ด๋–ค ๋™์ž‘์„ ์ผ์–ด๋‚˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠน์ • ์š”์†Œ์— user interactiveํ•œ ๋ฐ˜์‘์„ ์ฃผ๋Š” ๊ฒƒ์ด EVENT๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
(์ข‹์€ ์›น์‚ฌ์ดํŠธ๋ผ๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž์˜ ๋ถ„๋…ธ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์ข‹์€ ์‚ฌ์ดํŠธ๋ผ๊ณ  ํ•œ๋‹ค..๐Ÿ˜…)
์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์€

  • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์˜€์„ ๋•Œ

  • input์— ๊ฐ’์ด ๋ณ€ํ™”ํ–ˆ์„ ๋•Œ
  • ์ด์ง€๊ฐ€ ๋กœ๋”ฉ๋˜์—ˆ์„ ๋•Œ

ex) ์˜ท์„ ํŒŒ๋Š” ์‡ผํ•‘๋ชฐ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ–ˆ์„ ๋•Œ, ์ƒํ’ˆ ์‚ฌ์ง„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ๋‹ค๋ฅธ ๊ฐ๋„์˜ ์ œํ’ˆ์œผ๋กœ ๋ฐ”๋€Œ์–ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ


๋งˆ์šฐ์Šค๋ฅผ hoverํ–ˆ์„ ๊ฒฝ์šฐ, ์•„๋ž˜์ด๋ฏธ์ง€์™€ ๊ฐ™์ด action์ด ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿ“— addEventListener

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ฝ”๋“œ์— event handler๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์–ด์„œ ๊ทธ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฐ˜์‘์ด ์ผ์–ด๋‚˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.event handler๋Š” event listener๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
DOM API์— ์žˆ๋Š” method์ค‘ ํ•˜๋‚˜์ธ addEventListener method๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ธ์ž๋กœ ๋ฐ›์€ ํ•จ์ˆ˜function()๋ฅผ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” addEventListener๋ฅผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.

addEventListenner(์ด๋ฒคํŠธ์ข…๋ฅ˜, function(){
});
search.addEventListener('keydown',(e)=>{if(e.code === 'Space'){
alert('๋‹ค์‹œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!')
}})

๐Ÿ“Œ querySeletor ์™€ getElementBy

์ผ๋‹จ querySeletor์™€ getElementBy๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋น„๊ตํ•ด๋ณด์ž.

getElementByClassName๋Š” ๋ฐฐ์—ด์˜ ํŠน์ • ๋ถ€๋ถ„์„ ์ •์˜ํ•ด์„œ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ํŠน์ง•์ด ์žˆ๊ณ , querySelector๋Š” ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ๊ฑธ๋ฆฌ๋Š” ๋ถ€๋ถ„ ๋จผ์ € ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ querySelector๊ฐ€ ๋” ์œ ์—ฐํ•˜๋‹ค. id, class๋ฅผ ํฌํ•จํ•œ css3 ์„ ํƒ์ž๋กœ ๋ฌธ์„œ ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ getElementBy์˜ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Œ€๋žต 1.2๋ฐฐ ์ •๋„ ๋” ๋น ๋ฅด๋‹ค.

querySelector๋ฅผ ๊ทธ๋ž˜์„œ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ๋ฐฐ์ œํ•ด์•ผ ํ•˜๋Š”๊ฐ€? ์— ๋Œ€ํ•œ ๋‹ต์€ NO๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
querySelector๋Š” ์ดˆ๋‹น ์•ฝ 7,000,000๊ฑด์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์—๋ฐ€๋ฆฌ์ดˆ๋กœ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด ๋ฐ€๋ฆฌ ์ดˆ๋‹น 7,000๊ฑด์„ ์‹คํ–‰ ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—„์ฒญ๋‚œ ์†๋„์ด๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆฌ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์—†๋‹ค. getElementBy๊ฐ€ ๋ณด๋‹ค ๋น ๋ฅผ ๋ฟ ์ ˆ๋Œ€ ๋Š๋ฆฌ์ง€ ์•Š๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

'DEV' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React  (0) 2024.10.20
Database  (2) 2024.10.20
Responsive Web : ๋ฐ˜์‘ํ˜• ์›น์‚ฌ์ดํŠธ  (2) 2024.10.20
CSS : Layout์˜ ๋ชจ๋“  ๊ฒƒ  (1) 2024.10.20
Semantic Web๊ณผ Semantic Tag  (2) 2024.10.20