jQuery 입문 | 요소의 탐색 | 필터링 메소드 .first() .last() .eq() .filter() .not() .is()

필터링(filtering) 메소드

DOM 트리에서 선택한 요소를 필터링하기 위한 메소드는 다음과 같다.

메소드 설명
.first() 선택한 요소 중에서 첫 번째 요소를 선택함.
.last() 선택한 요소 중에서 마지막 요소를 선택함.
.eq() 선택한 요소 중에서 전달받은 인덱스에 해당하는 요소를 선택함.
.filter() 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소를 모두 선택함.
.not() 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소를 제외한 나머지 요소를 모두 선택함.
.has() 선택한 요소 중에서 전달받은 선택자에 해당하는 요소를 자손 요소로 가지고 있는 요소를 모두 선택함.
.is() 선택한 요소 중에서 전달받은 선택자에 해당하는 요소가 하나라도 존재하면 참(true)을 반환함.
.map() 선택한 요소 집합의 각 요소마다 콜백 함수를 실행하고, 그 반환값으로 구성된 jQuery 객체를 반환함.
.slice() 선택한 요소 중에서 전달받은 인덱스 범위에 해당하는 요소만을 선택함.

.first() 메소드와 last() 메소드

.first() 메소드는 선택한 요소 중에서 첫 번째 요소가 선택되고, .last() 메소드는 마지막 요소가 선택된다.

$("li").first().css("background-color", "red");
$("li").last().css("background-color", "yellow");

코드 실행

위 예제는 첫번째 요소의 CSS 속성이 “red"로 설정되고, 마지막 요소의 CSS 속성이 “yellow"로 설정된다.

.eq() 메소드

.eq() 메소드는 선택한 요소 중에서 전달받은 인덱스에 해당하는 요소를 선택한다.
인덱스는 선택된 요소들의 첫번째 요소를 인덱스 0으로 놓고, 앞에서부터 검색된다. 인덱스가 음수인 경우에는 선택한 요소 집합의 맨 마지막 요소를 인덱스 -1로 놓고, 뒤에서부터 검색된다.

$("li").eq(0).css("background-color", "red");
$("li").eq(-1).css("background-color", "yellow");

코드 실행

위 예제는 인덱스가 0에 해당되는 첫번째 요소의 CSS 속성이 “red"로 설정되고, 인덱스 -1에 해당되는 마지막 요소의 CSS 속성이 “yellow"로 설정된다.

.filter() 메소드

.filter() 메소드는 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소가 모두 선택된다.

이 메소드는 인수로 선택자나 jQuery 객체, HTML DOM 요소 등을 전달받을 수 있다.
또한, 요소 집합의 각 요소를 체크할 수 있는 함수를 전달할 수도 있다.

$("li").filter(":odd") .css("background-color", "yellow");

코드 실행

위 예제에서는 사용된 :odd 선택자는 인덱스가 홀수인 요소를 모두 선택하는 선택자이기에, 두 번째와 네 번째 요소가 선택된다.

여기서 주의할 점은 jQuery의 인덱스가 언제나 0부터 시작하기 때문이다.
따라서 :odd:even 선택자를 사용할 때는 언제나 인덱스가 0부터 시작한다는 사실을 염두에 두고 사용해야 한다.

.not() 메소드

.not() 메소드는 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소를 제외한 나머지 요소가 모두 선택된다.
즉, .filter() 메소드와는 정반대로 동작하여 요소가 선택된다.

$("li").not(":odd").css("background-color", "yellow");

코드 실행

위 예제에서는 사용된 :odd 선택자는 인덱스가 홀수인 요소를 모두 선택하는 선택자이기에, 두 번째와 네 번째 요소의 반대인 첫 번째와 네 번째 요소가 선택된다.

.has() 메소드

.has() 메소드는 선택한 요소 중에서 전달받은 선택자에 해당하는 요소를 하위 요소로 가지고 있는 요소가 모두 선택된다.

$("li").has("b").css("background-color", "yellow");

코드 실행

위 예제는 선택한 <li>요소 중에서 하위 요소로 <b>요소를 가지고 있는 요소만의 CSS 속성을 변경한다.

.is() 메소드

.is() 메소드는 선택한 요소 중에서 전달받은 선택자에 해당하는 요소가 하나라도 존재하면 참(true)을 반환한다.

if ($("b").parents().is("ul")) {
  $("p").text("<b> 요소의 상위 요소로 <ul> 요소가 존재한다.");
}

코드 실행

위 예제에서는 우선 선택한 <b>요소의 상위 요소를 선택하여, 선택된 상위 요소 중에 <ul> 요소가 존재하는지 여부를 .is()로 체크하고 있다.

.map() 메소드

.map() 메소드는 선택한 요소 집합의 각 요소마다 지정된 콜백 함수를 실행하고, 그 반환값으로 구성된 jQuery 객체를 반환한다.

var val = $("li").map(function() {
  return $(this).html();
})
.get()   // 반환된 값을 배열로 반환된다.
.join(", "); // 배열의 모든 요소를 쉼표(,)로 구분하여 문자열로 반환된다.
$("p").html(val);

코드 실행

위 예제는 선택한 <li> 요소들의 각 요소마다 해당 요소의 html 값을 반환하는 콜백함수를 실행한다.
콜백함수의 실행으로 반환되는 값들은 .get() 메소드를 통해 배열로 반환되며, 다시 .join() 메소드를 통해 문자열로 반환된다.

.slice() 메소드

.slice() 메소드는 선택한 요소 중에서 전달받은 인덱스 범위에 해당하는 요소만 선택된다.

$("li").slice(2).css("background-color", "yellow");
$("li").slice(1, 3).css("border", "2px solid green");

코드 실행

위 예제는 첫번째 줄에서는 선택한 <li>요소 중에서 인덱스가 2과 같거나 그 이상인 요소만의 CSS 속성을 변경하고, 두번째 줄에서는 선택한 <li>요소 중에서 인덱스가 1과 같거나 3이하인 요소만의 CSS 속성을 변경한다.

참조




최종 수정 : 2021-08-27