programming/JS

[jQuery] filter

솧이 2022. 8. 27. 12:36

이미 select된 element에 대해 추가적으로 또 select(필터링)하는 함수

배열처럼 인덱스(index), 요소의 속성값으로 선택하는 함수도 있다

 

~ .first() : ~의 첫번째 요소만 선택 $('~:first')와 동일한 결과가 나온다

~ .last() : ~의 마지막 요소만 선택 $('~:last')와 동일한 결과가 나온다

~ .eq(i) : ~의 i번째 요소만 선택 $('~:eq(i)')와 동일한 결과가 나온다 -> 슈도클래스에도 동일한 것 있다

~ .filter(selector) : ~ 중 selector 지정 요소만 선택

~ .filter(callback) : ~ 중 callback 결과가 '참' 인 것만 선택

~ .not(selector) : ~ 중 selecotr 지정 요소를 제외 -> attribute selector 사용 [attr = value] 형태

 

* find와 filter의 차이

find 는 전체(혹은 기준 값 하위)에서 검색을 하지만 filter 는 자기 자신의 레벨에서 검색을 한다.

그래서 apple, kiwi, pineapple 을 검색하기 위하여 find 를 쓸때는 $("#fruits") 를 썼지만 filter 를 쓸때는 $("#fruits div") 로 사용하였다.

그래야 fruits div 하위이 div 를 검색할 수 있기 때문이다.

만약 filter 를 사용할때 $("#fruits) 을 사용했다면 하위가 아닌 fruits 자체를 kiwi 라는 아이디명과 비교했을 것이다.

 

* Pseudo Classes (슈도클래스)특정 셀렉터에 특별한 효과를 부여하기 위해 사용한다기본 구문 : selector:pseudo-class {property: value}

기본 목록 : :link, :visited :hover, :active, :focus, :first-child, nth-child(n), :checked

:active - 활성화된 요소에 대한 속성을 지정한다

 

이 둘의 차이점은? 

$('li')[0]; -> DOM element

$('li').eq(0); -> jquery object

이 아래 코드는 실행되지 않는다 why? addClass는 jquery 메소드이니까!

$('li')[0].addClass('selected');

 

 

<script>
$(document).ready(function(){
	$('button').click(function(){
    	$('*').removeClass('.selected');
        $('#result').text('결과');
    });
    $('#btn11').click(function(){
    	$('li').first().addClass('selected');
        $('li:first').addClass('selected');
    });
    $('#btn12').click(function(){
    	$('li').eq(1).addClass('selected');
        $('li:eq(1)').addClass('selected');
    });
    $('#btn14').click(function(){
    	$('li').filter('.a1').addClass('selected');
        
        //filter 매개변수로 함수도 올 수 있다 callback 함수 사용 가능하다
        //<'li'> 중에서 '차'가 들어간 것만 선택한다
        //참/거짓을 리턴하고 참인 것만 선택된다
        $('li').filter(function(){
        //여기서의 this는 jquey object가 아니라 js dom element이다 고로 innerHTML 붙여진다
        //jquery로 하고 있으면 $(this)..
        	return this.innerHTML.indexOf('차') > -1            
        }).addClass('selected');
    });
    $('#btn15').click(function(){
    	$('li').not("[class*='b']").addClass('selected');
    });
    // find() vs filter()
	// 	find() : 선택된 것들의 하위에서 선택
	// 	filter() : 선택된 것들 중에서 선택
    $('#btn16').click(function(){
    	$('ul').find('.a1').addClass('selected');
    });
});
</script>

 

 

practice

 filter() jQuery 기본 셀렉터 문법에서 사용하던 필터 구문을 사용할 수 있다
 filter() 메서드는 두 가지 형식으로 사용할 수 있다
 $(셀렉터).filter(필터구문);
 $(셀렉터).filter(function(index, selector){ });     

<script>
$(document).ready(function () {
	$("#myInput").on("keyup", function() {
		let value = $(this).val().toLowerCase();
		//$("#demo").text(value); //확인용! 제대로 결과가 나오는지 확인하는

	$("#myTable tr").filter(function(){
		// 	if($(this).text().toLowerCase().indexOf(value) > -1) { //제이쿼리로 하는 방법
		// 		$(this).show();
		// 	}else {
		// 		$(this).hide();
		// 	} //얜 t/f 반환 안함

		$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
		//-1 보다 크면 값이 있는 것.
		})
	})

});
</script>

'programming > JS' 카테고리의 다른 글

[jQuery] AJAX 아직 덜 함  (0) 2022.08.30
[jQuery] Traversing  (0) 2022.08.27
[jQuery] Dimension  (0) 2022.08.27
[jQuery] class  (0) 2022.08.27
[jQuery] HTML  (0) 2022.08.26