2011-07-29 2 views
3

grep이 선택적 선택기 인수와 함께 작동하지 않는 것은 이상합니다. grep이라고하는 기존 방법이 JQuery 규칙을 벗어나는 것 같습니다. 즉,이 작품 :

$.grep($('div'), function(div) { return div.className == 'section' }); 

이되지 않습니다 또한

$('div').grep(function(div) { return div.className == 'section' }); 

, 그것 때문에 태그의 목록을 검색 할 교묘하게이의 - 코드의 첫 번째 줄을, 그것이 작동하는 동안, .css() 등을 호출 할 수있는 멋진 체인 가능한 JQuery 객체 대신 플랫 배열을 반환합니다.

JQuery에서 grep이 이런 식으로 작동하는 데는 충분한 이유가 있습니까?

답변

3

찾고있는 기능은 $.fn.filter()의 두 번째 (콜백) 변형입니다.

훨씬 $.grep와 동일한 방식으로 작동하지만 jQuery를 개체에 작용하고, 예를 들어, 콜백 함수에서 true을 반환하는 모든 요소의 jQuery를 객체 반환

:

$('div') 
.filter(function() { 
    return this.className == 'section' 
}) 
.css(...) ; 
+0

그것은 그들이 같은 일을하는 것이 이상한 것 하나를 : 당신이 요소의 배열을 가지고 일이면


또한, 당신은 쉽게 jQuery를 객체에 넣을 수 있습니다 태그 및 배열에 대한 다른 태그. 두 가지 모두에 동일한 이름을 사용해도 아무런 해가 없습니다. 평범한 배열을 필터링하는지 또는 태그를 선택하는지에 따라 실제로는 다른 이름을 사용해야하는 것은 혼란 스럽습니다. –

0

내가 jQuery.grep()을 생각을 jQuery.inArray()array.indexOf의 구현을 제공하는 방법과 비슷한 array.Filter의 구현을 의미합니다. 따라서 다른 jQuery 메서드 규칙을 따르지 않습니다.

다른 사람이 지적한 것처럼, filter()이 당신이하려는 일에 존재합니다.

0

$.grep은 배열과 함께 사용하기위한 utility methods 중 하나입니다. 같은 패턴을 따르는 다른 방법이 있습니다 (예 : $.each, $.map, $.inArray$.merge).

메서드에 해당하는 traversing methods을 참조해야하는 요소 컬렉션에서 작동하는 메서드를 원할 경우 filter method이됩니다. 컬렉션에 대한,

$($.grep($('div'), function(div) { return div.className == 'section' })) 
관련 문제