Jquery ui jquery ui组合框结果排序

Jquery ui jquery ui组合框结果排序,jquery-ui,combobox,jquery-ui-autocomplete,Jquery Ui,Combobox,Jquery Ui Autocomplete,我有一个jQueryUIComboBox自动完成小部件,我正在尝试编写一个匹配器函数来对搜索结果进行排序。 我正在尝试获得首选结果: 当您键入例如lo时,结果应按以下方式排序: 伦敦 博洛尼亚 巴塞罗那 当术语与第一个键入的字母匹配时,它位于第一位,当术语包含字母时,它出现在第一个规则之后 我发现了一些类似的东西,但我不能让它工作。在这个解决方案中,我找不到一种方法来建立matcher变量和term变量之间的关系 组合框原件 来源:函数(请求、响应){ //按搜索词中的首字母匹配 var m

我有一个jQueryUIComboBox自动完成小部件,我正在尝试编写一个匹配器函数来对搜索结果进行排序。 我正在尝试获得首选结果:

当您键入例如lo时,结果应按以下方式排序:

  • 伦敦
  • 博洛尼亚
  • 巴塞罗那
当术语与第一个键入的字母匹配时,它位于第一位,当术语包含字母时,它出现在第一个规则之后

我发现了一些类似的东西,但我不能让它工作。在这个解决方案中,我找不到一种方法来建立matcher变量和term变量之间的关系

组合框原件
来源:函数(请求、响应){
//按搜索词中的首字母匹配
var matcher=newregexp(“^”+$.ui.autocomplete.escapeRegex(request.term),“i”);
响应(select.children(“option”).map(函数(){
var text=$(this.text();
if(this.value&(!request.term | | matcher.test(text)))
返回{
标签:text.replace(
新正则表达式(
(?![^&;]+;)(?!)(?![^&;]+;),“gi”
)“$1”,
值:文本,
选项:这个
};
}) );
},
jqueryui自动完成的解决方案
$(文档).ready(函数(){
//我的源代码是html
var source=['Adam','Benjamin','Matt','Michael','Sam','Tim'];
$(“输入”)。自动完成({
来源:功能(请求、响应){
var term=$.ui.autocomplete.escapeRegex(request.term)
,startsWithMatcher=newregexp(“^”+术语“i”)
,startsWith=$.grep(源,函数(值){
返回startsWithMatcher.test(value.label | | value.value | | value);
})
,containsMatcher=newregexp(术语“i”)
,contains=$.grep(源,函数(值){
返回$.inArray(值,startsWith)<0&&
容器匹配器测试(value.label | | value.value | | value);
});
响应(startsWith.concat(contains));
}
});
});

任何可能的反馈都将不胜感激


谢谢。

我可以通过添加以下内容来实现此功能:

source: function (request, response) {
                var matcher = $.ui.autocomplete.escapeRegex(request.term),
                startsWithMatcher = new RegExp("^" + matcher, "i"), 
                startsWith = $.grep(select.children("option"), function(value) {
                        return startsWithMatcher.test(value.label || value.value || value);
                    }),
                    containsMatcher = new RegExp(matcher, "i"),
                    contains = $.grep(select.children("option"), function (value) {
                        return $.inArray(value, startsWith) < 0 &&
                            containsMatcher.test(value.label || value.value || value);
                    });
                response(startsWith.concat(contains).map(function(option) {
                  var text = $(option).text();
                  var val = $(option).val();  
                  return {
                    label: text,
                    value: val,
                    option: $(option)
                  };
                }));
            }

我可以通过添加以下内容来实现这一点:

source: function (request, response) {
                var matcher = $.ui.autocomplete.escapeRegex(request.term),
                startsWithMatcher = new RegExp("^" + matcher, "i"), 
                startsWith = $.grep(select.children("option"), function(value) {
                        return startsWithMatcher.test(value.label || value.value || value);
                    }),
                    containsMatcher = new RegExp(matcher, "i"),
                    contains = $.grep(select.children("option"), function (value) {
                        return $.inArray(value, startsWith) < 0 &&
                            containsMatcher.test(value.label || value.value || value);
                    });
                response(startsWith.concat(contains).map(function(option) {
                  var text = $(option).text();
                  var val = $(option).val();  
                  return {
                    label: text,
                    value: val,
                    option: $(option)
                  };
                }));
            }