自动完成Jquery删除’ – ‘后的所有内容

我使用简单的JQUERY Autocomplete来显示某些记录的重复项,例如当用户填写文本字段时的名称或地址。

这里代码

 $(function() { var availableTags = ; $("#name_value").autocomplete({ source: availableTags, autoFocus:true }); });  

文本下方显示结果。

 Name[____________________] Paul - 121.456.789-00 Robert - 122.456.789-00 Cid - 123.456.789-00 

如何删除所有后- (空格连字符空格)及其后的所有内容,并在文本字段中只有像Paul,Robert或Cid这样的名称?

要简单地删除数字并在输入框中显示名称,您可以使用substrindexOf (或者您可以使用正则表达式并根据需要进行replace )。 像这样:

 $( "#name_value" ).autocomplete({ select: function( event, ui ) { $('#myInputBox').text(ui.item.value.substr(0, ui.item.value.indexOf(" - "))); } }); 

您可能希望在 此处查看这两个函数,以查看其工作原理。

如果您无法更改ajax/ajax_show.php以便按照您希望的方式提供数据,那么可以使用RegEx并使用javascript替换所有内容。

 $(function() { var availableTags = ; $("#name_value").autocomplete({ source: availableTags.map(function(v) { return v.replace(/(^[^-]*) .*/, '$1') }), autoFocus:true }); }); 

基本上,这个解决方案是使用map函数迭代所有元素并创建一个元素,其元素被“清理”了。 方法replace将使用正则表达式(^[^-]*) .*来获取破折号之前的所有内容。

如果你想要更具体的东西,你可以使用正则表达式,另一个可行的例子是:/ /^(.*) - .*$/

如果可能的话,我认为你最好将你的数据从ajax_show.php作为json返回,比如:

 [ { "value": "121.456.789-00", "label": "Paul" }, { "value": "122.456.789-00", "label": "Robert" }, ... ] 

然后,如这里的jQuery UI文档所示: https : //jqueryui.com/autocomplete/#custom-data (在“自定义数据和显示”选项卡下),它只会使用名称作为标签,但你会仍然可以访问Id(value属性)。

并且作为补充的好消息,您传递数据的方式(通过将其分配给’source’属性)根本不需要更改。