首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery-自动完成插件搜索

jquery-自动完成插件搜索
EN

Stack Overflow用户
提问于 2012-12-26 14:46:24
回答 2查看 357关注 0票数 2

有一个jquery-自动完成插件,它只允许您搜索确切的字符串。

让我们说这是数据..。

代码语言:javascript
复制
   [
        ['apple is good'],
        ['apple grows on tree'],
        ['the tree and the apple'],
        ['red apple'],
        ['apple tree']
    ]

现在,搜索“苹果”应该显示一切。

但是当输入“苹果树”时,它只返回“苹果树”。

我希望它返回智能结果(2,3和5)。

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

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

这个插件允许你提供你自己的搜索。

精细化的搜索能让我们聪明地搜索到什么样子呢?

它需要忽略空格,并将搜索查询拆分为单词,以便对每个单词进行一个接一个的计算。

代码语言:javascript
复制
$("#textInputEle").autocomplete({
    url:"path/to/data.json",
    filter: function(result, filter) {
     //whats should this function be?
    }
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-26 16:03:48

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

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

做你想要完成的事情的逻辑可能如下所示:

  1. 将由空格(" ")传递的result拆分为一个术语数组。
  2. 在术语数组中从每个字符串中创建正则表达式
  3. 确保用户键入的内容匹配每个正则表达式。

看起来是这样的:

代码语言:javascript
复制
$("#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/

票数 1
EN

Stack Overflow用户

发布于 2012-12-26 15:18:59

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14042172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档