jquery-autocomplete插件搜索

时间:2012-12-26 14:46:25

标签: jquery jquery-plugins autocomplete

有这个jquery-autocomplete插件 它允许您仅搜索确切的字符串..

所以我们说这是数据..

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

现在正在寻找" apple"应该显示所有。

但是当打字"苹果树"它只会返回"苹果树"。
我想让它返回智能结果(2,3和5)。

  • "苹果生长在树上"
  • "树和苹果"
  • " apple tree"

这意味着:它应该为每个单词重新评估搜索(但是从已经过滤的结果中过滤掉它)

此插件允许您提供自己的搜索..

精确搜索能让我们智能搜索的内容是什么样的?

它需要忽略空格并将搜索查询拆分为单词以逐个评估每个单词...

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

2 个答案:

答案 0 :(得分:1)

我相信jquery自动完成的开箱即用功能只会返回包含短语" apple tree"的结果。所以,它会从你的例子中返回#5,但对于诸如&#34之类的短语它也会返回true;他住在苹果树附近#34;和#34;苹果树是她院子里最大的。"

答案 1 :(得分:1)

您可以使用filter选项提供自己的过滤逻辑。

您提供的功能需要resultfilter个参数。 filter参数是用户搜索的内容。 result参数是建议列表中的项目。您的函数必须返回true(如果建议匹配)或false(如果建议不匹配)。

做你想要完成的事情的逻辑可能看起来像这样:

  1. 将您按空格(result)传递的" "分成若干条款。
  2. 从术语数组
  3. 中的每个字符串中创建一个正则表达式
  4. 确保用户键入的内容与每个正则表达式匹配
  5. 这看起来像这样:

    $("#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/