Javascript JQuery UI自动完成,按任意顺序查找所有单词
我正在使用JQuery UI自动完成javascript程序。我正在尝试以任何顺序查找搜索框中的所有单词。这意味着如果我搜索“三一二”,如果数据库中有一个名为“一二三”的条目,我希望它被选中。这听起来很复杂,但实际上不应该如此。这是我的密码:Javascript JQuery UI自动完成,按任意顺序查找所有单词,javascript,regex,jquery-ui,jquery-ui-autocomplete,Javascript,Regex,Jquery Ui,Jquery Ui Autocomplete,我正在使用JQuery UI自动完成javascript程序。我正在尝试以任何顺序查找搜索框中的所有单词。这意味着如果我搜索“三一二”,如果数据库中有一个名为“一二三”的条目,我希望它被选中。这听起来很复杂,但实际上不应该如此。这是我的密码: $( "#autocomplete" ).autocomplete({ max:10, minLength:2, source: function (request, response) { var term = reque
$( "#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;
}
});
$(“#自动完成”).autocomplete({
最大:10,最小长度:2,源:函数(请求,响应){
var term=request.term;
风险值列表=期限分割(“”);
var-arr=[];
对于(var i=0;i
它还不起作用。如果有人能给我这段代码中的任何指针,也许能告诉我哪里出错了,那就太棒了!我可以让JQuery Autocomplete工作,但无法让它与正则表达式搜索词匹配。谢谢!我几天前写了一段类似的代码
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;
}
}
};
var availableTags=[
“一二三”,
“四五六”,
"七八九一零";;
$(“#标记”)。自动完成({
资料来源:availableTags,
搜索:功能(事件、用户界面){
$(“#包装器”).empty();
},
选择:功能(e、ui){
$(this.val(ui.item.name);
返回false;
},
})
.data('autocomplete')。\u renderItem=功能(ul,项目){
matchFound=0;
var inp=$(“#标记”).val().split(“”);
var items=item.label.split(“”);
对于(变量i=0;i-1){
matchFound+=1;
}否则{
matchFound+=1;
}
}
if(matchFound==inp.length){
返回$('')
.data('item.autocomplete',item.label)
.append(“”)
.appendTo($(“#wrapper”);
打破
}
}
};
这可能对你有帮助。
我正在处理一个类似的问题,我想显示所有匹配项,无论关键字的顺序如何。为了澄清,我将展示一个示例:
list = ["AK-47 Redline (Minimal Wear)","Statrak AK-47 Redline (Minimal Wear)", "M4A1-S Something (Minimal Wear)"];
这是我的“数据库”,如果我键入“Minimum wear”,我将得到所有结果,但我的想法是能够键入“ak Minimum wear”,从而获得以下建议:ak-47红线(Minimum wear),Statrak ak-47红线(Minimum wear)
,但是我没有得到任何东西,因为jquery的自动完成检查提供的关键字是否是列表中任何元素的索引。因此,在我的例子中,我实现了一个自定义搜索,在这里我递归地生成一个匹配每个关键字的结果列表。小示例:
关键词:ak磨损
列表:[“AK-47红线(最小磨损)”,“Statrak AK-47红线(最小磨损)”,“M4A1-S某物(最小磨损)”]
首先,我生成一个包含第一个关键字的列表:ak,然后我用新生成的列表进行递归调用,但这次我检查下一个关键字,然后继续,直到到达最后一个关键字并返回最后生成的列表
以下是javascript代码:
var someList = ["seven nine five", "five fifteen twenty", "twenty-five maybe one", "two (five) one"];
$('#name').autocomplete({
source: function(request, response) {
var term = request.term;
var data = handleAutocomplete(term); //your custom handling
response(data);
}
});
function recursiveListUpdate(someList, keywords) {
newList = [];
someList.forEach(function(element) {
if (element.toLowerCase().indexOf(keywords[counter].toLowerCase()) >= 0) {
newList.push(decodeURI(element)); //if any %20, etc symbols
}
});
counter++;
if (counter == keywords.length) {
return newList;
}
return recursiveListUpdate(newList, keywords);
}
function handleAutocomplete(term) {
var str = term; // get the "keywords"
var keywordsFromNameInput = str.split(" "); // split them into a list
counter = 0; // set counter for keywords.lenght
// recursively get new list that contains the give keywords no matter the order
return recursiveListUpdate(someList, keywordsFromNameInput);
}
这是一个:我不理解最后一个函数。有没有办法将其更新到搜索栏中?最后一个函数_renderItem()是处理最终结果。