2011-08-12 4 views
1

텍스트 상자에 입력 할 때 가능한 검색을 표시하는 google instant seach와 같은 것을 구현하려고합니다.jQuery 검색 키워드가 포함 된 검색 결과 자동 완성

지금까지 json 문자열과 jquery 자동 완성 결과를 완벽하게 표시했습니다. 이제 검색 키워드가있는 모든 검색 결과를 표시하고 싶습니다.

검색 키가 "foo bar"이고 결과에 "foo fun bar"가있는 경우와 같이; 이제 "foo"및 "bar"키가 결과에 포함되지만 현재 자동 완성 플러그인은 결과를 표시하지 않습니다.

이렇게하려면 플러그인을 수정할 방법이 있습니까?

답변

1

텍스트 상자 값을 개별 토큰으로 분할하고 각 토큰의 소스 객체를 검색하려면 자동 완성 위젯의 필터 함수의 기본 동작을 수정해야합니다.

download the jQuery UI source here하실 수 있습니다. 수정해야 할 필터 함수에 대해서는 jquery.ui.autocomplete.js 라인 422를 살펴보십시오. 값 객체의 레이블 멤버, 값 멤버 또는 값 객체 자체가 정규 표현식과 일치하는지 확인하기 위해 정규식 테스트를 반환한다는 것을 알 수 있습니다. 이 세 가지 소스 중 하나에서 파생 된 문자열 요소에서 .split()에 대한 호출에 의해 반환 된 배열의 모든 문자열에 테스트 결과를 집계해야합니다.

수정 된 자동 완성 코드를 축소하려면 Google's Closure Compiler Service을 사용하십시오.

+0

답변 해 주셔서 감사합니다. 정확히 내가 찾고 있었어. 건배! – Sunyl

+1

jquery.ui.autocomplete.js 라인을 422 개 수정하여 ([lthibodeaux] [1] 제안) 매력적이고 작동합니다! 비슷한 점을 달성하려는 사람들은 수정 된 코드 세그먼트를 사용합니다. jquery.ui.autocomplete.js의 422 줄에서 필터 : function (array, term) { \t \t var matcher; \t \t var keys = term.split (''); \t \t \t $ .each (키 기능 (인덱스 치) {\t \t \t \t 정합 = 새로운 정규식 ($ .ui.autocomplete.escapeRegex (값), "I") \t \t}); \t \t \t \t return $.grep (array, function (value) { \t \t \t return matcher.test (value.label || value.value || value); \t}}} – Sunyl

0

어떻게 데이터를 쿼리합니까? 서버 사이트에서 모든 레코드를 얻으십시오 포함 Startwith와 검색.

+0

나는 서버에서 검색 키워드를 포함하는 결과를 얻지 만, 예를 들어 "seattle 98104"를 찾으면 결과가 나오지만 자동 완성은 "Seattle WA 98104"를 얻습니다. "WA"토큰으로 인해 검색 문자열이 일치하지 않으므로 표시하지 않습니다. – Sunyl

0

데이터를받는 방법에 따라 다릅니다. 공백으로 키워드를 분할하고 Foo와 Bar가 모두있는 모든 데이터를 나열하십시오.

+0

예. 동일한 접근 방식을 생각하고 있었지만 현재 자동 완성 플러그인이이를 허용하는지 궁금 해서요. 아니면 코드를 수정해야합니다. – Sunyl

+0

아. 나는 그것을 급하게 읽고 당신이 자동 완성을 썼다고 생각했다. 아마도 다른 사람이 언급 한 내용을 수행하고 jquery의 소스를 편집해야 할 것입니다. – Danny

관련 문제