我有一个类似
的数组["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON"]
我在jQuery UI Autocomplete
填充它们。然而,排序的顺序似乎很奇怪
例如:(但我有更多的记录)当我输入“a”时会返回
JOAQUIN
BERNARDINO
ALASKA
MADERA
ANDERSON
我正在尝试的是(从开始)
ALASKA
ANDERSON
我的例子
有可能吗?有人能指出我正确的方向。
更新
答案 0 :(得分:5)
var myarray= ["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON"]
myarray.sort();
我们将两个参数传递给源{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);
}
});
});
答案 2 :(得分:1)
试试吧
<input type='text' />
var json = ["JOAQUIN", "BERNARDINO", "MODOC","ALASKA","MADERA", "ANDERSON", "KINGSTONE"].sort();
$('input').autocomplete({
source: json
});
答案 3 :(得分:0)
实际上,API文档中有一个Example涉及您的要求。这是我的解决方案(略有缩短):
this.group.traverse( function( object ) {
if ( object.isMesh ) {
object.geometry.dispose();
// release material like above
}
} );