2012-12-26 146 views
2

有此jquery-autocomplete插件 它允許您僅搜索完全匹配的字符串..jQuery的自動完成插件搜索

因此,可以說,這是該數據..

[ 
     ['apple is good'], 
     ['apple grows on tree'], 
     ['the tree and the apple'], 
     ['red apple'], 
     ['apple tree'] 
    ] 

現在搜索「蘋果「應該顯示所有。

但輸入「蘋果樹」,當它僅返回「蘋果樹」。
我希望它返回智能結果(2,3和5)。

  • 「蘋果長在樹上」
  • 「樹和蘋果」
  • 「蘋果樹」

這意味着:它應該爲每個字再重新評估搜索(但是從已經過濾的結果將其過濾)

這個插件可以讓你提供自己的搜索..

能夠讓我們巧妙搜索的精緻搜索是什麼樣的?

它需要忽略空格和單詞後,其他評估每個字一個分裂的搜索查詢...

$("#textInputEle").autocomplete({ 
    url:"path/to/data.json", 
    filter: function(result, filter) { 
    //whats should this function be? 
    } 
}); 

回答

1

您使用filter選項來提供自己的過濾邏輯。

您提供的功能需要resultfilter參數。 filter參數是用戶搜索的內容。 result參數是建議列表中的項目。您的功能必須返回true(如果建議是匹配)或false(如果建議不匹配)。

的邏輯,你要完成可能是這個樣子的:

  1. 斯普利特result你的空間(" ")傳遞到項的數組。
  2. 方面的陣列中創建一個正則表達式從每個字符串的
  3. 確保什麼是用戶輸入的匹配每個正則表達式

這將是這個樣子:

$("#auto").autocomplete({ 
    data: [ 
     ['apple is good'], 
     ['apple grows on tree'], 
     ['the tree and the apple'], 
     ['red apple'], 
     ['apple tree'] 
     ], 
    filter: function(result, filter) { 
     var terms = filter.split(" "), 
      match = true, 
      i = 0, 
      regex; 

     for (; match && i < terms.length; i++) { 
      regex = new RegExp(terms[i]); 
      match = match && regex.test(result.value); 
     } 

     return match; 
    } 
}); 

例:http://jsfiddle.net/ztkX2/1/

+0

簡化了這個例子 - 我迭代了兩次,並不是故意的。 –

1

我相信jquery的自動完成的出的現成功能將只返回結果包含短語「蘋果樹」。所以,它會從你的例子中返回#5,但是對於諸如「他住在蘋果樹附近」和「蘋果樹是她院子裏最大的」這樣的短語也會返回真。

+0

的感謝!得到它了! – adardesign