Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery UI自动完成,按任意顺序查找所有单词_Javascript_Regex_Jquery Ui_Jquery Ui Autocomplete - Fatal编程技术网

Javascript JQuery UI自动完成,按任意顺序查找所有单词

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

我正在使用JQuery UI自动完成javascript程序。我正在尝试以任何顺序查找搜索框中的所有单词。这意味着如果我搜索“三一二”,如果数据库中有一个名为“一二三”的条目,我希望它被选中。这听起来很复杂,但实际上不应该如此。这是我的密码:

$( "#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()是处理最终结果。