我正在使用JQuery UI Autocomplete javascript程序。我试图以任何顺序在搜索框中找到所有单词。这意味着如果我搜索"三一二"如果在数据库中有一个名为" One Two Three"的条目,我希望它被选中。这听起来很复杂,但它真的不应该。这是我的代码:
$( "#autocomplete" ).autocomplete({
max:10, minLength:2, source: function (request, response) {
var term = request.term;
var list = term.split(" ");
var arr = [ ];
for (var i = 0; i < list.length; i++) {
var buf = "/"+list[i]+"/";
arr.push(buf);
}
var rez = [];
for (var n = 0; n < availableTags.length; n++) {
for (var i = 0; i < arr.length; i++) {
if(arr[i].test(availableTags[n]){
rez.push(abailableTags[n]);
}
}
}
response(rez);
return;
}
});
它还没有工作。如果有人可以在这个代码中提供任何指示,也许告诉我哪里出错,那就太棒了!我可以让JQuery Autocomplete工作,但不能使它与RegEx搜索术语相匹配。谢谢!
答案 0 :(得分:2)
我正在研究一个类似的问题,我想显示所有匹配项,无论关键字的顺序如何。只是为了澄清我将展示一个例子:
list = ["AK-47 Redline (Minimal Wear)","Statrak AK-47 Redline (Minimal Wear)", "M4A1-S Something (Minimal Wear)"];
这是我的“数据库”,如果我输入“minimal wear”,我会得到一切的结果,但我的想法是能够输入“ak minimal wear”,从而得到以下建议:{{1但是我没有得到任何东西,因为jquery的自动完成检查提供的关键字是否是indexOf列表中的任何元素。所以在我的情况下,我实现了一个自定义搜索,我递归地生成一个匹配每个关键字的结果列表。小例子:
关键字:ak wear,
列表:[“AK-47红线(略有磨损)”,“Statrak AK-47红线(略有磨损)”,“M4A1-S Something(略有磨损)”]
首先我生成一个包含第一个关键字的列表:ak,然后我用新生成的列表进行递归调用,但是这次我检查下一个关键字,然后我继续直到我到达最后一个关键字并且最后返回生成列表。
以下是javascript代码:
AK-47 Redline (Minimal Wear), Statrak AK-47 Redline (Minimal Wear)
这是JSFiddle:
答案 1 :(得分:0)
我几天前写了类似的代码。
var availableTags = [
'One Two Three',
'Four Five Six',
'Seven Eight Nine Ten'];
$('#tags').autocomplete({
source: availableTags,
search: function (event, ui) {
$('#wrapper').empty();
},
select: function (e, ui) {
$(this).val(ui.item.name);
return false;
},
})
.data('autocomplete')._renderItem = function (ul, item) {
matchFound = 0;
var inp = $("#tags").val().split(" ");
var items = item.label.split(" ");
for (var i = 0; i < items.length; i++) {
for (var j = 0; j < inp.length; j++) {
index = items[i].toUpperCase().indexOf(inp[j].toUpperCase());
if (index > -1) {
matchFound += 1;
} else {
matchFound += 1;
}
}
if (matchFound == inp.length) {
return $('<div class="element"></div>')
.data('item.autocomplete', item.label)
.append('<a href="#">' + item.label + '</a>')
.appendTo($('#wrapper'));
break;
}
}
};
它可能对你有所帮助。 JSFiddle