jQuery UI自动完成使用startsWith

我正在使用本地数据source: myArray的jQuery UI自动完成( source: myArray )。 我希望自动完成只提出input的string开头的结果,而不是默认的不区分大小写的search。 有一个简单的解决scheme,或者我必须提供我的自定义search/源callback?

看到这个:

匹配启动词:

http://blog.miroslavpopovic.com/jqueryui-autocomplete-filter-words-starting-with-term

他重写了自动完成filter方法。 我使用这个,它运作良好。

 // Overrides the default autocomplete filter function to search only from the beginning of the string $.ui.autocomplete.filter = function (array, term) { var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i"); return $.grep(array, function (value) { return matcher.test(value.label || value.value || value); }); }; 

匹配词:

匹配开始与string中的任何单词。

例如“LHR伦敦”与“伦敦”相匹配

 var matcher = new RegExp("\\b" + $.ui.autocomplete.escapeRegex(term), "i"); 

\ b在字边界处声明位置(^ \ w | \ w $ | \ W \ w | \ w \ W)

目前我已经这样做了,不确定是否有更好的解决scheme:

 source: function(request, response) { var filteredArray = $.map(orignalArray, function(item) { if( item.value.startsWith(request.term)){ return item; } else{ return null; } }); response(filteredArray); }, 

这种方法也可以对要显示的项目数量施加限制(例如10个项目)。

我进入Jqueryui代码并在那里切换。

如果您查看自动完成部分,您将看到以下行:

 filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i") 

修改为以下(注意,这是一个全局变化):

 filter:function(a,b){var g=new RegExp("^" + d.ui.autocomplete.escapeRegex(b),"i") 

这里有一个稍微不同的方式来区分大小写的search。 请注意在第二个示例中创build正则expression式时缺less“i”,这是在默认实现中导致不区分大小写的原因。

不区分大小写:

  $('#elem').autocomplete({ source: array }); 

区分大小写:

  $('#elem').autocomplete({ source: function(request, response) { var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term, "")); var data = $.grep( array, function(value) { return matcher.test( value.label || value.value || value ); }); response(data); } }); 

您可以使用相同的方式进入Jquery UI Autocomplete示例

 <script> $("#autocompleteInputField").autocomplete({ source: function(request, response) { var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i"); response($.grep(myArray, function(item){ return matcher.test(item); }) ); } }); </script> 

或者使用$.map方法而不是$.grep

 <script> $("#autocompleteInputField").autocomplete({ source: function(request, response) { var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i"); response($.map(myArray, function(item) { if (matcher.test(item)) { return (item) } })); } }); </script> 
 source: function( request, response ) { var t = jQuery.grep(t, function(a){ var patt = new RegExp("^" + request.term, "i"); return (a.match(patt)); }); response(t); },