πŸ“– DOM κ³Ό Event

YeonnΒ·2024λ…„ 9μ›” 16일
0

JavaScript

λͺ©λ‘ 보기
26/26
post-thumbnail

πŸ“–Β DOM( Document Object Model )

πŸ‹ DOM: κ΅¬μ‘°ν™”λœ λ¬Έμ„œ( XML, HTML )λ₯Ό 객체 ν˜•νƒœλ‘œ ν‘œν˜„ν•˜λŠ” 방식

❓DOM TREE

πŸ‹ DOM: μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 HTML μ½”λ“œλ₯Ό ν•΄μ„ν•œ 결과둜 각각의 νƒœκ·Έκ°€ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ node 객체둜 λ³€ν™˜

  • node: HTML DOMμ—μ„œ 정보λ₯Ό μ €μž₯ν•˜λŠ” 계측적 λ‹¨μœ„
  • node tree: λ…Έλ“œλ“€μ˜ μ§‘ν•©μœΌλ‘œ λ…Έλ“œ κ°„μ˜ 관계λ₯Ό 트리 ꡬ쑰둜 λ‚˜νƒ€λ‚Έ 것 !

βœ”οΈΒ document 객체

πŸ‹ μ›Ή νŽ˜μ΄μ§€λ₯Ό 의미

  • JavaScriptμ—μ„œ DOM에 μ ‘κ·Όν•˜κ³ μž ν•  λ•Œμ—λŠ” document 객체λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€
    document - node κ°μ²΄λŠ” HTML μš”μ†Œμ˜ 선택과 μ‘°μž‘, 생성 및 μΆ”κ°€, 이벀트 ν•Έλ“€λŸ¬ μΆ”κ°€ λ“± HTML μš”μ†Œμ™€ κ΄€λ ¨λœ μž‘μ—…μ„ λ„μ™€μ£ΌλŠ” λ‹€μ–‘ν•œ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

βœ”οΈΒ HTML μš”μ†Œμ˜ 선택

λ©”μ„œλ“œ μ‚¬μš© μ˜ˆμ‹œμ„€ λͺ…
document.getElementById(’box’)ν•΄λ‹Ή μ•„μ΄λ””μ˜ μš”μ†Œλ₯Ό 선택
document.getElementsByclassName(’list-item’)ν•΄λ‹Ή ν΄λž˜μŠ€μ— μ†ν•œ μš”μ†Œλ₯Ό λͺ¨λ‘ 선택
document.getElementsByName(’email’)ν•΄λ‹Ή name 속성값을 κ°€μ§€λŠ” μš”μ†Œλ₯Ό λͺ¨λ‘ 선택
document.querySelectorAll(’ul > li’)ν•΄λ‹Ή CSS μ„ νƒμžλ‘œ μ„ νƒλ˜λŠ” μš”μ†Œλ₯Ό λͺ¨λ‘ 선택
document.querySelector(’header > #title’)ν•΄λ‹Ή CSS μ„ νƒμžλ‘œ μ„ νƒλ˜λŠ” μš”μ†Œλ₯Ό 첫 번째 μš”μ†Œ 선택

πŸ“ Elements λ³΅μˆ˜ν˜•, All의 경우 μ—¬λŸ¬ 개의 μš”μ†Œκ°€ μ„ νƒλ˜μ–΄ λ°°μ—΄λ‘œ λ°˜ν™˜ν•œλ‹€. μ„ νƒλœ μš”μ†Œλ“€ . μΌλΆ€λ§Œ μ‚¬μš©ν•˜κ³  싢을 경우 index 번호λ₯Ό μ΄μš©ν•˜μ—¬ μ ‘κ·Όν•  수 μžˆλ‹€.

βœ”οΈΒ HTML μš”μ†Œμ˜ 생성 및 μΆ”κ°€

λ©”μ„œλ“œ μ‚¬μš© μ˜ˆμ‹œμ„€ λͺ…
document.createElement(’form’)ν•΄λ‹Ή νƒœκ·Έμ˜ HTML μš”μ†Œλ₯Ό 생성
document.write(’hello world’)ν…μŠ€νŠΈλ₯Ό 화면에 좜λ ₯
μš”μ†Œ.appendChild(node)ν•΄λ‹Ή μš”μ†Œ λ‚΄λΆ€ κ°€μž₯ λ§ˆμ§€λ§‰μ— node μΆ”κ°€

πŸ“ createElement() 둜 μƒμ„±λœ λ…Έλ“œλŠ” appendChlid()둜 DOM에 μΆ”κ°€ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ—λ§Œ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 화면에 보여지지 μ•ŠλŠ”λ‹€ !

βœ”οΈΒ HTLM μš”μ†Œμ˜ μ‘°μž‘

λ©”μ„œλ“œ μ‚¬μš© μ˜ˆμ‹œμ„€ λͺ…
μš”μ†Œ.style.μŠ€νƒ€μΌμ†μ„± = β€˜200pxβ€™μš”μ†Œμ˜ μŠ€νƒ€μΌ 쑰회 및 λ³€κ²½
μš”μ†Œ.innerHTML = β€˜<li><span>hello</span></li>β€™μš”μ†Œ ν•˜μœ„μ˜ HTML 쑰회 및 λ³€κ²½
μš”μ†Œ.innerText = β€˜hello Tiaβ€™μš”μ†Œ ν•˜μœ„μ˜ ν…μŠ€νŠΈ 쑰회 및 λ³€κ²½
μš”μ†Œ.getAttribute(’placeholder’) / μš”μ†Œ.setAttribute(’min’, β€˜20’)μš”μ†Œμ˜ HTML 속성 쑰회 및 λ³€κ²½
μš”μ†Œ.classList = β€˜button button-redβ€™μš”μ†Œμ˜ class μˆ˜μ •

❓ Event

βœ”οΈΒ HTML 이벀트

πŸ‹ 이벀트( event ) ?
μ›Ή λΈŒλΌμš°μ €κ°€ μ•Œλ €μ£ΌλŠ” HTML μš”μ†Œμ— λŒ€ν•œ μ‚¬κ±΄μ˜ λ°œμƒ
이벀트( 사건 )이 λ°œμƒν•˜λ©΄ 이에 λ°˜μ‘ν•˜μ—¬ νŠΉμ • λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜κ°€ μ‹€ν–‰λœλ‹€ !

βœ”οΈΒ HTML event

βœ”οΈΒ event κ΄€λ¦¬ν•˜κΈ°

μ‚¬μš© μ˜ˆμ‹œμ„€ λͺ…
μš”μ†Œ.addEventListner(’click’, function() {…})μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ 처리λ₯Ό λ‹΄λ‹Ήν•˜λŠ” ν•¨μˆ˜
μš”μ†Œ.removeEventListener(’click’, function() {…})이벀트λ₯Ό μ œκ±°ν•  λ•Œ 처리λ₯Ό λ‹΄λ‹Ήν•˜λŠ” ν•¨μˆ˜
<μš”μ†Œ onclick=’handler()’ />μš”μ†Œμ˜ β€˜on이벀트λͺ…’ 속성에 λ™μž‘ μΆ”κ°€ν•˜λŠ” 방법
μš”μ†Œ.onclick = function() {…}node 객체 ν”„λ‘œνΌν‹°μ— ν•Έλ“€λŸ¬ ν•¨μˆ˜λ₯Ό λ“±λ‘ν•˜λŠ” 방법

βœ”οΈΒ event 객체

πŸ‹ 이벀트 ν•Έλ“€λŸ¬ ν•¨μˆ˜μ— 첫 번째 인수둜 μ „λ‹¬λ˜λŠ” 객체: ν•΄λ‹Ή μ΄λ²€νŠΈμ— λŒ€ν•œ 정보와 κΈ°λŠ₯이 λ‹΄κΉ€


βœ”οΈΒ event propagation

πŸ‹ λΈŒλΌμš°μ €μ—μ„œ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ, μ΄λ²€νŠΈκ°€ DOM 트리 λ‚΄μ—μ„œ μ–΄λ–»κ²Œ μ „νŒŒλ˜λŠ”κ°€? 에 λŒ€ν•œ κ°œλ…μœΌλ‘œ Capturing( 캑처링 ), Target( 타깃 ), Bubbling( 버블링 ) 3가지 λ‹¨κ³„λ‘œ λ‚˜λ‰œλ‹€.

  1. Capturing( 캑처링 )

    μ΄λ²€νŠΈκ°€ μ΅œμƒμœ„ λΆ€λͺ¨ μš”μ†Œμ—μ„œλΆ€ν„° μ‹œμž‘ν•΄ ν•˜μœ„ μš”μ†Œλ‘œ λ‚΄λ €κ°€λ©΄μ„œ λ°œμƒν•˜λŠ” 단계

    • μˆœμ„œ: window β†’ document β†’ μ΅œμƒμœ„ λΆ€λͺ¨ β†’ νƒ€κΉƒμ˜ λΆ€λͺ¨ β†’ 타깃( 이벀트 λ°œμƒ μš”μ†Œ )
  2. Target( 타깃 )

    μ΄λ²€νŠΈκ°€ μ‹€μ œλ‘œ λ°œμƒν•œ μš”μ†Œμ—μ„œ μ‹€ν–‰λ˜λŠ” λ‹¨κ³„λ‘œ μš”μ†Œμ—μ„œ λ°œμƒν•œ 이벀트λ₯Ό 처리

    • μˆœμ„œ: 타깃( 이벀트 λ°œμƒ μš”μ†Œ )μ—μ„œ 이벀트 μ‹€ν–‰
  3. Bubbling( 버블링 )

    νƒ€κΉƒμ—μ„œ 이벀트 μ²˜λ¦¬κ°€ λλ‚œ ν›„ λ‹€μ‹œ λΆ€λͺ¨ μš”μ†Œλ‘œ μ΄λ²€νŠΈκ°€ μ „νŒŒ

    • 타깃 β†’ νƒ€κΉƒμ˜ λΆ€λͺ¨ β†’ μ΅œμƒμœ„ λΆ€λͺ¨ β†’ document β†’ window

πŸ“ event.stopPropagation() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 이벀트 버블링을 막을 수 μžˆλ‹€.

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보