如何使用jquery自动完成从简单数组输入启用字符串的起始精确匹配?
如果我有以下数组:
- smart
- oversmart
- smartland
- undersmart
- verysmart
如果我在文本输入框中输入"sma...",则只应显示smart和smartland,而不是其他。
如何使用jquery自动完成从简单数组输入启用字符串的起始精确匹配?
如果我有以下数组:
如果我在文本输入框中输入"sma...",则只应显示smart和smartland,而不是其他。
更新:附上答案代码:
var acList = ['smart', 'oversmart', 'smartland', 'undersmart', 'verysmart'];
$('#ac').autocomplete({
source: function (request, response) {
var matches = $.map(acList, function (acItem) {
if (acItem.toUpperCase().indexOf(request.term.toUpperCase()) === 0) {
return acItem;
}
});
response(matches);
}
});
实现此功能的方法已在http://api.jqueryui.com/autocomplete/文档中记录。
<script>
var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ];
$( "#autocomplete" ).autocomplete({
source: function( request, response ) {
var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
response( $.grep( tags, function( item ){
return matcher.test( item );
}) );
}
});
</script>
您可以使用正则表达式将输入的子字符串与您拥有的数组中的值进行匹配。
自从上一个答案被接受以来,情况已经发生了变化。现在有一个lookupFilter
选项可以实现这个功能,而且更加简单。根据https://stackoverflow.com/a/23239873/1204434,只需将此选项添加到您的选项列表中即可:
lookupFilter: function (suggestion, originalQuery, queryLowerCase) {
return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;
},
$('#someTextInput').keyup( function(){
var regExMatch = new RegEx( '^' + $(this).val() );
$_LIs = $('#someUl li');
$_LIs.hide();
$_LIs.each( function(){
if( this.innerText.match(regExMatch) ) { $(this).show(); }
} );
} );
new RegEx
参数中删除 '^' +
,以恢复您所描述的有问题的行为。 '^'
表示选择行/字符串的开头,因此除非 's' 在开头,否则不会匹配。