我有this fiddle自动完成机场名称。
问题 - 排序
我发现this question解决了这个问题,但我无法在我的方案中实施。不是专业人士! 问题的快速预览 -
var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim'];
$("input").autocomplete({
source: function (request, response) {
var term = $.ui.autocomplete.escapeRegex(request.term)
, startsWithMatcher = new RegExp("^" + term, "i")
, startsWith = $.grep(source, function(value) {
return startsWithMatcher.test(value.label || value.value || value);
})
, containsMatcher = new RegExp(term, "i")
, contains = $.grep(source, function (value) {
return $.inArray(value, startsWith) < 0 &&
containsMatcher.test(value.label || value.value || value);
});
response(startsWith.concat(contains));
}
});
我只是尝试调整源代码,但这不起作用。
此外,实际机场列表包含35000多个名称,这种搜索方法是否有效? 二进制搜索的填充位置和方式。
答案 0 :(得分:2)
如果您只需要按字母顺序对结果进行排序,请使用响应函数参数中的排序方法:
$.each(source, function(i, airportItem){
if (airportItem.iata.toLowerCase().indexOf(searchTerm) !== -1 || airportItem.name.toLowerCase().indexOf(searchTerm) === 0)
ret.push(airportItem.name + ' - ' + airportItem.iata);
});
response(ret.sort());
这是一个经过修改的小提琴,用于说明:http://jsfiddle.net/xxww6/