반응형
javascript 요소 선택
- 각 메서드는 특정 상황에서 적절하게 사용 가능
- querySelector / querySelectorAll → 가장 유연하고 대부분의 상황에서 대응 가능
- 반복이 필요한 경우 NodeList는 forEach를 바로 사용할 수 있지만, HTMLCollection은 Array.from()으로 변환해야 함.
요소 탐색 대상
- 요소 선택 메서드는 document와 부모 요소가 탐색 대상이 됨
- getElementById()의 경우 documnet만 가능
탐색 대상 객체 | 설명 |
document | 웹 페이지 전체 문서 전체 |
Element (특정 요소) | 특정 요소 내 자식 요소들만 탐색 |
getElementById()
// [문법]
document.getElementById('아이디');
- 용도: id 속성이 있는 요소 하나를 선택
- 반환값: 단일 요소 객체 (HTMLElement)
- 특징:
- id는 문서 내에서 고유해야 하므로 이 메소드는 항상 하나의 요소만 반환함.
- 빠르고 직관적임.
- 반드시 document에서만 호출 가능, 특정 영역 내에 id를 찾고 싶은 경우 querySelector을 사용
const title = document.getElementById('main-title');
console.log(title); // <h1 id="main-title">안녕하세요</h1>
✓ 신분증 번호(ID) 로 사람 하나를 딱 찾는 것
getElementsByClassName()
// [문법]
document or Element.getElementsByClassName('클래스명');
- 용도: 특정 class 속성을 가진 모든 요소 선택
- 반환값: 유사 배열 객체 (HTMLCollection)
- 특징:
- 실시간 컬렉션 (DOM이 변경되면 자동으로 업데이트됨)
- 반복문(for, for...of, Array.from())을 사용해 접근 가능
<ul>
<li class="menu-item">메뉴1</li>
<li class="menu-item">메뉴2</li>
<li class="menu-item">메뉴2</li>
</ul>
const items = document.getElementsByClassName('menu-item');
console.log(items); // HTMLCollection(3) [li.menu-item, li.menu-item, li.menu-item]
console.log(items[0]); // 첫 번째 li
✓ "같은 유니폼을 입은 사람들(클래스명)을 한 줄로 세운 것"
→ 여러 명이지만 정확한 배열은 아님! (forEach는 안 되고, for, index는 가능)
getElementsByTagName()
// [문법]
document or Element.getElementByTagName('태그');
- 용도: 특정 태그명을 가진 모든 요소 선택 (예: ul, li, div..)
- 반환값: 유사 배열 객체 (HTMLCollection)
- 특징:
- 특정 태그명을 가진 요소들 실시간 리스트
✓ "모든 <li> 태그들을 한 상자에 담은 것" → 개수는 많지만 배열은 아님
querySelector()
// [문법]
document or Element.querySelector('CSS 선택자');
- 용도: CSS 선택자 방식으로 요소 하나 선택
- 반환값: 첫 번째로 일치하는 단일 요소 (Element)
- 특징:
- 유연하고 강력함 (CSS 선택자 모두 사용 가능)
- 가장 많이 사용되는 방식 중 하나
const firstBtn = document.querySelector('.btn');
console.log(firstBtn); // 첫 번째 .btn 요소
✓ "가장 먼저 눈에 띄는 사람 요소을 골라냄"
→ CSS 선택자 사용 가능. #id,. class, div > span 다 가능함.
querySelectorAll()
// [문법]
document or Element.querySelectorAll('CSS 선택자');
- 용도: CSS 선택자 방식으로 여러 개의 요소를 모두 선택
- 반환값: 정적 NodeList (배열 비슷한 객체)
- 특징:
- 정적 컬렉션 (DOM 변경 시 자동 업데이트 안 됨)
- forEach() 사용 가능
- 배열 메서드 직접 사용 불가 → 필요시 Array.from()으로 변환
const buttons = document.querySelectorAll('.btn');
console.log(buttons); // NodeList(3) [button.btn, button.btn, button.btn]
buttons.forEach(btn => console.log(btn.textContent));
✓ "조건에 맞는 사람 전부를 사진 찍듯 한 번에 쫙 뽑아서 리스트로 만든 것"
→ 배열처럼 생겼고, forEach() 사용 가능! 다만 이후 DOM 변화에는 반응 안 함.
자바스크립트 요소 선택 비교
메소드 | 선택 기준 | 반환 | 특징 |
getElementById | id | 요소 1개 | 가장 빠름, 고유한 id 사용 |
getElementsByClassName | class | HTMLCollection (유사 배열) | 실시간 반영, 반복문 필요 |
getElementsByTagName | 태그 | HTMLCollection (유사 배열) | 실시간 반영 |
querySelector | CSS 선택자 | 요소 1개 | 강력하고 유연함 |
querySelectorAll | CSS 선택자 | NodeList (유사 배열) | 정적 목록, forEach 가능 |
[javascript] 유사 배열
유사 배열배열처럼 인덱스와 length 프로퍼티를 가지고 있지만 실제 배열(Array)은 아닌 객체를 의미유사 배열의 특징인덱스가 있음 : 마치 배열처럼 0, 1, 2... 숫자 인덱스로 접근 가능 (예: obj [0], ob
u-pub.tistory.com
반응형
'JS > Javascript' 카테고리의 다른 글
[javascript] 요소의 텍스트·HTML 추출 및 변경 속성 (textContent, innerText, innerHTML, value) (1) | 2025.07.09 |
---|---|
[javascript] 유사 배열 (0) | 2025.07.08 |
[javascript] DOM, 파싱, 노드 (0) | 2025.07.08 |
[Javascript] 조건문 switch (0) | 2025.07.04 |
Framework(프레임워크), Library(라이브러리) (0) | 2025.06.27 |