更新键输入列表的元素

Update elements of list on keyentry

我一直在尝试创建一个列表,该列表会随着用户在文本框中输入值而更新。

字段分隔符可以是 space、逗号、制表符或换行符。多次出现的任何分隔符都将被截断。

到目前为止,我已经想出了以下代码,但它为每个由 space 分隔的值创建了一个 li 条目。

function myFunction() {
  document.getElementById("myUL").innerHTML = "";
  var node = document.createElement("LI");
  var input = document.getElementById("serverList");
  var val = input.value.split(/[\s,]+/);
  for (i = 0; i < val.length; i++) {
    var a = val[i].toUpperCase();
    var textnode = document.createTextNode(a);
    node.appendChild(textnode);
    document.getElementById("myUL").appendChild(node);
  }
}
<input type="text" id="serverList" onkeyup="myFunction()" placeholder="Enter the server list" title="Type in a name">
<ul id="myUL"></ul>

将您的 LI 创建移动到循环中

document.getElementById("serverList").addEventListener("input",function() {
  var input = this.value;
  var val = input.split(/[\s,]+/);
  document.getElementById("myUL").innerHTML="";
  for (var i = 0; i < val.length; i++) {
    var node = document.createElement("LI");
    var textnode = document.createTextNode(val[i].toUpperCase());
    node.appendChild(textnode);
    document.getElementById("myUL").appendChild(node);
  }
})
<input type="text" id="serverList" placeholder="Enter the server list" title="Type in a name">
<ul id="myUL"></ul>

您需要在每个for循环中创建一个新节点。

function myFunction() {
  document.getElementById("myUL").innerHTML = "";
  var node = document.createElement("LI");
  var input = document.getElementById("serverList");
  var val = input.value.split(/[\s,]+/);

  for (i = 0; i < val.length; i++) {
    var a = val[i].toUpperCase();
    var textnode = document.createTextNode(a);
    node.appendChild(textnode);
    document.getElementById("myUL").appendChild(node);
    node = document.createElement("LI");
  }
}
<input type="text" id="serverList" onkeyup="myFunction()" placeholder="Enter the server list" title="Type in a name">
<ul id="myUL"></ul>