dom 요소안에서 선택한 요소들중에서 추가적으로 제거하거나 새로운 요소를 만들경우가 있습니다. 
이번에는 원하지 않는 요소가 있을경우 필터를 통해 제외하고 선택하는 방법을 알아보겠습니다. 
jQuery 에는 filter 이라는 매서드가 있습니다.
이 메서드는 지정된 표현식과 일치하지 않는 요소를 제외하는 역활을 합니다.
먼저 설명을 보겠습니다.

filter

filter(expression)
전달받은 셀렉터 표현식이나 필터링 함수를 이용해서 확장 집합에서 엘리먼트를 필터링한다.

매개변수.
expression(String|Function)
확장집합에서 일치하지 않는 엘리먼트를 모두 제거하고자 jQuery 셀렉터 또는 필터링 조건을 결정하는 함수를 명시한다.
이 함수는 집합에 있는 각 엘리먼트마다 호출된다. 호출된 함수는 해당 시점의 엘리먼트를 함수 콘텍스트인 this로 이용한다. 호출결과로 fals를 반환하는 엘리먼트가 모두 집합에서 제거된다. 

아래의 예제는 여러 링크중에서 external 클래스가 부여된 링크만을 필터링해내서 몇개인지를 알아내는 예제 코드입니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<a href="#" class="external">link</a>
<a href="#" class="external">link</a>
<a href="#"></a>
<a href="#" class="external">link</a>
<a href="#" class="external">link</a>
<a href="#"></a></li>
<a href="#">link</a>
<a href="#">link</a>
<a href="#">link</a>
<a href="#">link</a>
<script type="text/JavaScript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/JavaScript">
	//집합에는 4개가 남아있다고 출력된다.
	alert(jQuery('a').filter('.external').length + ' external links');
</script>
</body>
</html>

결과는 총 10개의 링크중에서 4개를 필터링하는 메세지가 나옵니다.


filter()메서드는 표현식이 아닌 함수를 전달하는것도 가능한데, 그런 경우에 함수는 래퍼 집합을 필터링하는 동작을 수행해야 합니다. 앞의 예제에서는 문자열 표현식을 filter()메서드에 전달했는데, 함수로 사용하는 방식으로 변경할 경우 아래와 같습니다.

<script type="text/JavaScript">
	//결과는 같음.집합에는 4개가 남아있다고 출력된다.
	alert(
		jQuery('a')
			.filter(function(index){ return $(this).hasClass('external');})
			.length + ' external links'
		);
</script>

filter(function.... 형식을로 나오며 함수의 이름은 없습니다. 이런식으로 익명할수를 사용하며, 함수안에서 $(this)를 사용하는것은 래퍼 집합안에 있는 각각의 DOM요소를 참조하는 것입니다.
집합 안에서 a 요소들이 external 이라는 클래스값을 가지는지(hasClass) 확인하고 있습니다. 만일 true 라면 해당 요소가 집합에 유지되며, false 라면 해당 요소는 집합에서 제거될 것입니다.
예제에서의 index 는 집합안에서 요소의 인덱스를 숫자형식으로 참조하기 위함입니다.