对jQuery自动完成中的值进行排序

时间:2013-09-20 04:12:29

标签: jquery jquery-ui jquery-ui-autocomplete

我有一个类似

的数组
["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON"]

我在jQuery UI Autocomplete填充它们。然而,排序的顺序似乎很奇怪 例如:(但我有更多的记录)当我输入“a”时会返回

JOAQUIN
BERNARDINO
ALASKA
MADERA
ANDERSON

我正在尝试的是(开始)

ALASKA    
ANDERSON
我的例子

JSFiddle

有可能吗?有人能指出我正确的方向。

更新

enter image description here

4 个答案:

答案 0 :(得分:5)

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

Read More

See Demo

我们将两个参数传递给源{1}为request,第二个为response

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

  • response是其中的功能 将返回我们自动完成选择选项。

现在在$.map内我们正在检查带有名为json的数组的类型化单词。

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

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

response(matches);会将其发送给自动填充。

答案 1 :(得分:4)

我遇到了与对象相同的问题而不是简单的字符串数组,并且需要在检索结果后进行排序(以实现"从#34开始;在列表顶部的建议)。所以对于未来的搜索者,我将添加我的解决方案。

使用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 starts with

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

答案 2 :(得分:1)

试试吧

<input type='text' />


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

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

enter image description here

答案 3 :(得分:0)

实际上,API文档中有一个Example涉及您的要求。这是我的解决方案(略有缩短):

this.group.traverse( function( object ) {

    if ( object.isMesh ) {

        object.geometry.dispose();
        // release material like above

    }

} );