jQuery의 :eq() 선택자는 특정 인덱스의 요소를 선택하는 데 유용합니다. 하지만 바닐라 JavaScript를 사용하면 jQuery 없이도 동일한 기능을 구현할 수 있습니다.
바닐라js로 eq() 선택자 사용 방법
바닐라js로 eq() 선택자 사용 방법
1. querySelectorAll과 배열 인덱스 사용
위의 목차를 클릭하면 해당 글로 자동 이동 합니다.
querySelectorAll과 배열 인덱스 사용
<div>
<p>첫 번째 문단</p>
<p>두 번째 문단</p>
<p>세 번째 문단</p>
</div>
<script>
const element = document.querySelectorAll('div > p')[2];
console.log(element.textContent); // "세 번째 문단"
</script>
div > p 구조에서 특정 문단을 선택합니다.
querySelectorAll은 NodeList를 반환하며, 배열 인덱스로 특정 요소를 선택합니다.
nth-child CSS 선택자 사용
<ul>
<li>첫 번째 항목</li>
<li>두 번째 항목</li>
<li>세 번째 항목</li>
</ul>
<script>
const element = document.querySelector('ul > li:nth-child(3)');
console.log(element.textContent); // "세 번째 항목"
</script>
ul > li 구조에서 특정 리스트 항목을 선택합니다.
nth-child는 CSS 선택자로, 특정 위치의 요소를 정확히 지정할 수 있습니다.
Array.from으로 NodeList를 배열로 변환
<div>
<div>
<span>첫 번째 span</span>
<span>두 번째 span</span>
<span>세 번째 span</span>
</div>
</div>
<script>
const elements = Array.from(document.querySelectorAll('div > div > span'));
const element = elements[2];
console.log(element.textContent); // "세 번째 span"
</script>
div > div > span 구조에서 특정 span 요소를 선택합니다.
Array.from은 NodeList를 배열로 변환하여 배열 메서드를 사용할 수 있습니다.
slice 메서드로 특정 범위 선택
<section>
<article>첫 번째 article</article>
<article>두 번째 article</article>
<article>세 번째 article</article>
<article>네 번째 article</article>
</section>
<script>
const elements = Array.from(document.querySelectorAll('section > article')).slice(1, 4);
elements.forEach(el => console.log(el.textContent)); // "두 번째 article", "세 번째 article", "네 번째 article"
</script>
section > article 구조에서 특정 범위의 article 요소를 선택합니다.
slice는 배열의 일부분을 추출할 때 유용합니다.
filter 메서드로 조건부 선택
<div>
<div>
<p data-id="1">첫 번째 문단</p>
<p data-id="2">두 번째 문단</p>
<p data-id="3">세 번째 문단</p>
</div>
</div>
<script>
const element = Array.from(document.querySelectorAll('div > div > p')).filter(el => el.dataset.id === '3')[0];
console.log(element.textContent); // "세 번째 문단"
</script>
div > div > p 구조에서 특정 조건을 만족하는 p 요소를 선택합니다.
filter는 조건에 맞는 요소만 추출할 때 사용됩니다.
find 메서드로 단일 요소 선택
<ul>
<li data-id="1">첫 번째 항목</li>
<li data-id="2">두 번째 항목</li>
<li data-id="3">세 번째 항목</li>
</ul>
<script>
const element = Array.from(document.querySelectorAll('ul > li')).find(el => el.dataset.id === '3');
console.log(element.textContent); // "세 번째 항목"
</script>
ul > li 구조에서 조건을 만족하는 첫 번째 li 요소를 선택합니다.
find는 조건을 만족하는 첫 번째 요소를 반환합니다.
forEach로 순회하며 조건 검사
<div>
<div>
<div>첫 번째 div</div>
<div>두 번째 div</div>
<div>세 번째 div</div>
</div>
</div>
<script>
let element;
document.querySelectorAll('div > div > div').forEach((el, index) => {
if (index === 2) element = el;
});
console.log(element.textContent); // "세 번째 div"
</script>
div > div > div 구조에서 특정 위치의 div 요소를 선택합니다.
forEach는 각 요소를 순회하며 조건을 검사할 때 유용합니다.
reduce로 특정 위치의 요소 선택
<section>
<article>첫 번째 article</article>
<article>두 번째 article</article>
<article>세 번째 article</article>
</section>
<script>
const element = Array.from(document.querySelectorAll('section > article')).reduce((acc, el, index) => {
return index === 2 ? el : acc;
}, null);
console.log(element.textContent); // "세 번째 article"
</script>
section > article 구조에서 특정 위치의 article 요소를 선택합니다.
reduce는 배열을 순회하며 특정 조건에 맞는 값을 누적할 때 사용됩니다.
for 루프로 직접 순회
<div>
<ul>
<li>첫 번째 항목</li>
<li>두 번째 항목</li>
<li>세 번째 항목</li>
</ul>
</div>
<script>
const elements = document.querySelectorAll('div > ul > li');
let element;
for (let i = 0; i < elements.length; i++) {
if (i === 2) {
element = elements[i];
break;
}
}
console.log(element.textContent); // "세 번째 항목"
</script>
div > ul > li 구조에서 특정 위치의 li 요소를 선택합니다.
for 루프는 직접적인 제어가 필요할 때 유용합니다.
at 메서드로 음수 인덱스 지원
<div>
<div>
<p>첫 번째 문단</p>
<p>두 번째 문단</p>
<p>세 번째 문단</p>
</div>
</div>
<script>
const element = Array.from(document.querySelectorAll('div > div > p')).at(-2);
console.log(element.textContent); // "두 번째 문단"
</script>
div > div > p 구조에서 음수 인덱스로 p 요소를 선택합니다.
at은 음수 인덱스를 지원하여 배열의 끝에서부터 요소를 선택할 수 있습니다.
'web 언어 > HTML5 & CSS & Javascript' 카테고리의 다른 글
HTML5 - 테이블(Table) 목록 표현 방법 (0) | 2025.03.18 |
---|---|
JS - 바닐라js로 DOM 요소 복사하기 (0) | 2025.03.17 |
JS - 바닐라js로 hover 기능 구현 (0) | 2025.03.16 |
JS - 바닐라js로 slideToggle 기능 구현 (0) | 2025.03.16 |
JS - 바닐라js로 FadeIn, FadeOut 기능 구현 (0) | 2025.03.16 |