8

I have an array like

["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON"]

where I'm populating them in a jQuery UI Autocomplete. However the order of sorting seems to be weird.
For example:(But I have more no.of records) When I type "a" it returns

JOAQUIN
BERNARDINO
ALASKA
MADERA
ANDERSON

What I'm trying is to get (starting with)

ALASKA    
ANDERSON

JSFiddle for my example

Is it possible? Can someone point me in a right direction.

Updates:

enter image description here

4

4 回答 4

5
var myarray= ["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON"]
myarray.sort();

阅读更多

看演示

我们将两个参数传递给源,一个是request,第二个是response

  • requestis 代表我们正在制作的请求对象,在我们的例子中,它是我们在文本框中输入的字母。

  • response是一个函数,它将返回我们自动完成的选择选项。

现在在里面$.map我们用我们命名为 json 的数组检查输入的单词。

json.toUpperCase().indexOf(request.term.toUpperCase())这一行将输入的单词和数组转换为相同的大小写并返回。

匹配将是最终结果,其中包含您询问的项目列表。

并将response(matches);其发送到自动完成。

于 2013-09-20T04:15:25.150 回答
5

我在使用对象而不是简单的字符串数组时遇到了同样的问题,并且需要在检索结果后进行排序(以实现列表顶部的“startswith”建议)。所以对于未来的搜索者,我会添加我的解决方案。

使用 JQuery,您可以在结果对象的 .label 中搜索以用户输入开头的字符串,并将其余结果合并到这些字符串中,合并后使用 Underscore.js 库删除重复项。

例如:

var objects_array = [{"label":"A_ABC","value":"0"},{"label":"B_ABC","value":"1"},{"label":"C_ABC","value":"2"}];

$(document).ready ( function() {

$('#search').autocomplete({
    source: function (request, response) {

        var results = $.ui.autocomplete.filter(objects_array, request.term);               

        var top_suggestions = $.grep(results, function (n,i) {
                                 return (n.label.substr(0, request.term.length).toLowerCase() == request.term.toLowerCase());
                              });

        var merged_results = $.merge(top_suggestions,results);

        var final_results = _.uniq(merged_results,"label");

        response(final_results);
    }
});

});

jquery ui 以

结果示例:http: //i.stack.imgur.com/GKJ8d.png

于 2016-08-25T13:54:07.613 回答
1

试试看

<input type='text' />


var json = ["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON", "KINGSTONE"].sort();
$('input').autocomplete({
  source: json
 });

http://jsfiddle.net/Gm9Bz/5/

在此处输入图像描述

于 2013-09-20T04:20:51.500 回答
0

实际上,API 文档中有一个示例涉及您所要求的内容。这是我的(稍微缩短的)解决方案:

var json = ["JOAQUIN", "BERNARDINO", "MODOC", "ALASKA", "MADERA", "ANDERSON"].sort();
$( "#autocomplete" ).autocomplete({
  source: function(request, response) {
    // Escape regex
    var term = $.ui.autocomplete.escapeRegex(request.term);
    // Search results that start with the search term
    var matcher1 = new RegExp("^" + term, "i");
    // Search results that start differently
    var matcher2 = new RegExp("^.+" + term, "i");

    function subarray(matcher) {
        return $.grep(json, function(item) {
            return matcher.test(item);
        });
    }
    response($.merge(subarray(matcher1), subarray(matcher2)));
  }
});
于 2020-04-30T15:48:36.123 回答