有这个jquery-autocomplete插件 它允许您仅搜索确切的字符串..
所以我们说这是数据..
[
['apple is good'],
['apple grows on tree'],
['the tree and the apple'],
['red apple'],
['apple tree']
]
现在正在寻找" apple"应该显示所有。
但是当打字"苹果树"它只会返回"苹果树"。
我想让它返回智能结果(2,3和5)。
这意味着:它应该为每个单词重新评估搜索(但是从已经过滤的结果中过滤掉它)
此插件允许您提供自己的搜索..
精确搜索能让我们智能搜索的内容是什么样的?
它需要忽略空格并将搜索查询拆分为单词以逐个评估每个单词...
$("#textInputEle").autocomplete({
url:"path/to/data.json",
filter: function(result, filter) {
//whats should this function be?
}
});
答案 0 :(得分:1)
我相信jquery自动完成的开箱即用功能只会返回包含短语" apple tree"的结果。所以,它会从你的例子中返回#5,但对于诸如&#34之类的短语它也会返回true;他住在苹果树附近#34;和#34;苹果树是她院子里最大的。"
答案 1 :(得分:1)
您可以使用filter
选项提供自己的过滤逻辑。
您提供的功能需要result
和filter
个参数。 filter
参数是用户搜索的内容。 result
参数是建议列表中的项目。您的函数必须返回true
(如果建议匹配)或false
(如果建议不匹配)。
做你想要完成的事情的逻辑可能看起来像这样:
result
)传递的" "
分成若干条款。这看起来像这样:
$("#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;
}
});