E2 : μš”μ†Œ κ²€μƒ‰ν•˜κΈ°

2025. 9. 8. 20:34ㆍFront-end/JavaScript

λ°˜μ‘ν˜•

λͺ©μ°¨

1. μš”μ†Œμ˜ 검색

2. document.getElementById

3. querySelectorAll, querySelector

5. matches();

6. closest


1. μš”μ†Œμ˜ 검색

μš”μ†Œλ“€μ΄ κ°€κΉŒμ΄ λΆ™μ–΄μžˆμ§€ μ•Šλ‹€λ©΄, μƒλŒ€ μœ„μΉ˜λ‘œ μš”μ†Œ λ…Έλ“œμ— μ ‘κ·Όν•  수 μ—†λ‹€.

이럴 경우, idλ₯Ό κ²€μƒ‰ν•΄μ„œ μ›ν•˜λŠ” μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€.


2. id둜 κ²€μƒ‰ν•΄μ„œ μš”μ†Œ 닀루기

μš”μ†Œμ— id 속성이 있으면 document.getElementById(id)λ₯Ό μ‚¬μš©ν•΄ μ ‘κ·Όν•  수 μžˆλ‹€.

<div id="element">
  <div id="content">blah blah</div>
</div>

<script>
  let element = document.getElementById('element');	// id둜 μš”μ†Œ κ²€μƒ‰ν•΄μ„œ μ–»μŒ
  
  element.style.background = 'red';	// μš”μ†Œμ˜ 배경색 λ³€κ²½
</script>

 

 


3. querySelectorAll, querySelector

1. querySelectorAll

[element].querySelectorAll(css)λŠ” μžμ‹ μš”μ†Œ 쀑 μ£Όμ–΄μ§„ css μ„ νƒμžμ— λŒ€μ‘ν•˜λŠ” μš”μ†Œλ₯Ό λͺ¨λ‘ λ°˜ν™˜ν•œλ‹€.

<ul>
  <li>1-1</li>
  <li>1-2</li>
</ul>
<ul>
  <li>2-1</li>
  <li>2-2</li>
</ul>
<script>
  let elements = document.querySelectorAll('ul > li:last-child');
  
  for (let elem of elements) {
    alert(elem.innerHTML);	// "1-2", "2-2"
  }
</script>

μ˜ˆμ‹œ μ½”λ“œλŠ” λ§ˆμ§€λ§‰ <li> μš”μ†Œλ₯Ό λͺ¨λ‘ λ°˜ν™˜ν•˜κ³  μžˆλ‹€.

이 λ•Œ μ‚¬μš©ν•˜λŠ” cssλ‘œλŠ” 가상 ν΄λž˜μŠ€λ„ μ‚¬μš©ν•  수 μžˆλ‹€.

→ document.querySelectorAll(':hover') μž‘μ„± μ‹œ, hover μƒνƒœμΈ μš”μ†Œλ₯Ό λͺ¨λ‘ 담은 μ»¬λ ‰μ…˜μ„ λ°˜ν™˜

 

2. querySelector

[element].querySelector(css)λŠ” μ£Όμ–΄μ§„ css μ„ νƒμžμ— λŒ€μ‘ν•˜λŠ” μš”μ†Œ 쀑 μ²« 번째 μš”μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

 = [element].querySelectorAll(css) [0] 인 μ…ˆμ΄λ‹€.

 

querySelectorAll은 λͺ¨λ“  μš”μ†Œλ₯Ό κ²€μƒ‰ν•˜λ‚˜, querySelectorλŠ” ν•΄λ‹Ή μš”μ†Œλ₯Ό 찾으면 검색을 λ©ˆμΆ˜λ‹€λŠ” 차이가 μžˆλ‹€.

 


4. matches

[element].matches(css)λŠ” [element]κ°€ μ£Όμ–΄μ§„ CSS와 μΌμΉ˜ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•œλ‹€.(true/false)

μš”μ†Œ 배열을 μˆœνšŒν•˜μ—¬ μ›ν•˜λŠ” μš”μ†Œλ§Œ κ±ΈλŸ¬λ‚Ό λ•Œ μœ μš©ν•˜λ‹€.

<a href="https://example.com/file.zip">...</a>
<a href="htps://something.com">...</a>

<script>
  // document.body.children이 μ•„λ‹ˆμ–΄λ„ μ»¬λ ˆμ…˜μ΄λΌλ©΄ 이 λ©”μ„œλ“œ 적용 κ°€λŠ₯
  for(let elem of document.body.children) {
    if (elem.matches('(a[href$="zip"]')) {
      alcert("μ£Όμ–΄μ§„ CSS μ„ νƒμžμ™€ μΌμΉ˜ν•˜λŠ” μš”μ†Œ: " + elem.href );
    }
  }
</script>

 

 


5. closest

λΆ€λͺ¨/쑰상 μš”μ†Œ λ“± DOM νŠΈλ¦¬μ—μ„œ νŠΉμ • μš”μ†Œμ˜ μƒμœ„μ— μžˆλŠ” μš”μ†Œλ“€μ„ 쑰상 μš”μ†ŒλΌκ³  ν•œλ‹€.

[element].closest(css)λŠ” [element] 자기 μžμ‹ μ„ ν¬ν•¨ν•˜μ—¬ CSS μ„ νƒμžμ™€ μΌμΉ˜ν•˜λŠ” κ°€μž₯ κ°€κΉŒμš΄ 쑰상 μš”μ†Œλ₯Ό μ°ΎλŠ”λ‹€.

 

closest λ©”μ„œλ“œλŠ” ν•΄λ‹Ή μš”μ†ŒλΆ€ν„° DOM 트리λ₯Ό ν•œ 단계씩 거슬러 μ˜¬λΌκ°€λ©΄ μ›ν•˜λŠ” μš”μ†Œλ₯Ό 찾으며,

CSS μ„ νƒμžμ™€ μΌμΉ˜ν•˜λŠ” μš”μ†Œλ₯Ό 찾으면 검색을 μ€‘λ‹¨ν•˜κ³  μ°Ύμ•„λ‚Έ μš”μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

<h1>lits</h1>

<div class="contents">
  <ul class="book">
    <li class="chapter">page 1 </li>
    <li class="chapter">page 2 </li>
  </ul>
</div>

<script>
  let chapter = document.querySelector('.chapter');	// LI
  
  alert(chapter.closest('.book'));	// UL
  alert(chapter.closest('.contents'));	// DIV
  
  alert(chapter.closest('h1'));	// null (h1은 li의 쑰상이 μ•„λ‹˜)
</script>

 


6. getElementsBy*

아이디가 μ•„λ‹Œ νƒœκ·Έλ‚˜ 클래슀 등을 μ΄μš©ν•΄ μ›ν•˜λŠ” λ…Έλ“œλ₯Ό μ°ΎλŠ” λ©”μ„œλ“œμ΄λ‹€.

querySelectorλ₯Ό μ΄μš©ν•˜λŠ” 게 더 νŽΈλ¦¬ν•˜κ³  문법도 μ§§μ•„μ„œ μš”μ¦˜μ€ 잘 μ•ˆμ“°μΈλ‹€.

  • getElementsByName : name 검색
  • getElementsByTagName : νƒœκ·Έλ‚˜ * 검색
  • getElementsByClassName : class둜 검색
  • ...

였래된 μŠ€ν¬λ¦½νŠΈλ‚˜ 일뢀 κΌ­ ν•„μš”ν•œ μƒν™©μ—μ„œ 쓰일 수 μžˆλ‹€.

 

 

 

 

μ°Έκ³ 

λ°˜μ‘ν˜•