自动完成Jquery删除' - '后的所有内容

时间:2016-07-27 18:18:16

标签: javascript jquery

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

这里是代码

<script type="text/javascript">
                $(function() {
                    var availableTags = <?php include('ajax/ajax_show.php'); ?>;
                    $("#name_value").autocomplete({
                        source: availableTags,
                        autoFocus:true
                    });
                });
            </script>

在文本下方显示结果。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

基本上,此解决方案使用map函数迭代所有元素,并使用元素&#34; clean&#34;创建 new array。起来。 方法replace将使用正则表达式(^[^-]*) .*来抓取破折号前的所有内容。

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

答案 1 :(得分:1)

如果可能的话,我认为最好将你的数据从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 (值属性)。

另外好消息是,您传递数据的方式(通过将其分配给'source'属性)根本不需要更改。

答案 2 :(得分:1)

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

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

您可能希望查找这两个函数herehere以查看其工作原理。