【发布时间】:2013-05-02 12:39:39
【问题描述】:
我正在使用 jQuery Autocomplete 来显示来自大约 2000 条记录的列表的结果。因为我认为这个列表很长,所以我需要一个好的过滤器来搜索所有这些记录。
我已经修改了源,这样我不仅可以在标签字段中进行搜索,还可以在值字段中进行搜索。我现在想要的是我可以搜索“S4 Galaxy”,它会找到“Samsung Galaxy S4”。标准的jquery自动完成只能从左到右搜索,所以会找到“galaxy s4”,但不会找到“s4 galaxy”。我也想看“gal s4”,找到“Samsung Galaxy S4”。
另外,如果匹配加粗就更好了 > "Samsung Galaxy S4"
我现在使用的完整代码如下:
var completeResults = [{
value: "S4 iv",
label: "Samsung Galaxy S4",
image: "samsung_galaxy_s_iv_1.jpg"
}, {
value: "stackoverflow",
label: "Nokia lumia 920",
image: "nokia_lumia_920_1.jpg"
}];
completeResults 现在是一个简短的列表!通常大约 2000 条记录。
function custom_source(request, response) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(completeResults, function (value) {
return matcher.test(value.value) || matcher.test(value.label);
}));
}
$("#s").autocomplete({
source: custom_source,
minLength: 0
}).data("ui-autocomplete")._renderItem = function (ul, item) {
var inner_html = "<a><img src='../img/type/120x200/" + item.image + "' width='21' height='35'/><span class='title'>" + item.label + "</span></a>";
return $("<li></li>")
.data("item.autocomplete", item)
.append(inner_html)
.appendTo(ul);
};
【问题讨论】:
-
有了这么多记录,您最好在服务器上进行搜索
-
好吧,我想在浏览器中执行此操作,这样我就可以减少数据库查询。我怎么能做这个服务器端?用 PHP 吗?我不想连续查询数据库,因为如果每天有几千人使用它,我会占用大量数据库!
-
确实如此,绝对是一种权衡。但是,您的 Web 服务器可以处理数千个请求。还有一个问题——如果我输入“诺基亚三星”,我应该得到两个结果吗?还是必须在建议项中找到每个术语?
-
“诺基亚三星”不会给出任何结果。仅一项中的所有匹配项!
标签: jquery jquery-ui jquery-ui-autocomplete