如何在自动完成中用空格替换下划线?

How do I replace underscores with spaces in autocomplete?

我正在使用 jquery-ui 创建搜索下拉列表,但我想在下拉结果中用空格替换下划线。 我已经在源代码上尝试了 .replace,但它似乎不起作用。

下面是我的自动完成代码。我如何在上面使用 .replace(/_/g, " ")

谢谢。

$(document).ready(function(){
    
    var alls = $.each([
    
    'Dr._Peppins',
    'Spain',
    'index',
    
    ],
    
    $( "#userInput" ).autocomplete({
    
    source: alls
    
    });
    
});

试试这个:

 source: alls.replace("_", " ");

考虑以下因素。

$(function() {
  var alls = [
    'Dr._Peppins',
    'Spain',
    'index',
  ];

  function undScore2Space(word) {
    return word.replace("_", " ");
  }

  function filterArray(arr) {
    $.each(arr, function(i, e) {
      arr[i] = undScore2Space(e);
    });
    return arr;
  }

  $("#userInput").autocomplete({
    source: function(req, resp) {
      var results = $.ui.autocomplete.filter(alls, req.term);
      resp(filterArray(results));
    }
  });
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.1/jquery-ui.js"></script>

<div class="ui-widget">
  <label for="userInput">Input: </label>
  <input id="userInput">
</div>

在您的示例中,您执行了 Each。此格式不正确,应该会产生错误。

In the case of an array, the callback is passed an array index and a corresponding array value each time. (The value can also be accessed through the this keyword, but Javascript will always wrap the this value as an Object even if it is a simple string or number value.) The method returns its first argument, the object that was iterated.

所以您不想对数组中的每个项目初始化自动完成。如果你愿意,你可以修改每个部分,但是如果你希望源包含这些字符,最好在查找后将它们过滤掉。

您可以使用 source 的函数并以这种方式执行事件。

您还可以执行以下操作:

$(document).ready(function(){
    var alls = [];
    $.each([
      'Dr._Peppins',
      'Spain',
      'index'
    ], function(index, elem){
      alls.push(elem.replace("_", " "));
    });
    $("#userInput").autocomplete({
      source: alls
    });
});