2

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

所以可以说这是数据..

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

现在搜索“apple”应该会显示所有内容。

但是当输入“apple tree”时,它只会返回“apple tree”。
我希望它返回智能结果(2,3 和 5)。

  • “苹果长在树上”
  • “树和苹果”
  • “苹果树”

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

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

使我们能够智能搜索的精细搜索是什么样的?

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

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

2 回答 2

1

我相信 jquery 自动完成的开箱即用功能只会返回包含短语“苹果树”的结果。因此,它会从您的示例返回 #5,但对于诸如“他住在苹果树附近”和“苹果树是她院子里最大的”等短语,它也会返回 true。

于 2012-12-26T15:18:59.680 回答
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/

于 2012-12-26T16:03:48.407 回答