javascript - insertBefore 在空 ul 中

标签 javascript appendchild

我有一个漂亮、有效且实用的待办事项 list 。然而,在实践中(在手机上使用它),添加到列表中的新项目会被键盘隐藏。因此,我想让列表将每个项目添加到列表的开头或顶部,以便在创建新项目时看到它们。

输入“insertBefore()”,只要之前有子项插入,它就可以正常工作,否则会抛出错误。

您如何使用空列表来完成这项工作?只需执行“如果没有子元素,则执行此操作 - 否则 - 执行此操作”,或者是否有一个简单的添加到该过程?

var inputText = document.getElementById("textField");
  var myUl = document.getElementsByTagName("ul");

  inputText.addEventListener("keypress", function(event){
   if( event.keyCode === 13){
    var myInputText = this.value;
    var listItem = document.createElement("li");
    var spanItem = document.createElement("span");
    var theText = document.createTextNode(myInputText);
    var span_img = document.createElement("img");
    span_img.src = "images/trashCanBlack.png";
    spanItem.appendChild(span_img);
    listItem.appendChild(spanItem);
    listItem.appendChild(theText);

    myUl[0].appendChild(listItem); // this works, but only adds it on the end
    this.value = "";
      }
     });

最佳答案

So I want to have the list add every item to the beginning, or top of the list...

不管你信不信,就是这么简单:

myUl[0].insertBefore(listItem, myUl[0].firstChild);

如果 myUl[0] 为空(因此它的 firstChildnull)就可以了。 insertBefore 足够聪明,可以处理这个问题(通过有效地成为 appendChild)。

<小时/>

旁注:而不是做:

var myUl = document.getElementsByTagName("ul");

...然后在任何地方使用 myUl[0] ,您可以考虑:

var myUl = document.querySelector("ul"); // returns the first one

var myUl = document.getElementsByTagName("ul")[0];

...然后只需使用 myUl

关于javascript - insertBefore 在空 ul 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55091370/

相关文章:

javascript - 如何使用 .appendChild 创建一个简单的带有数字的表格行?

javascript - <br> 未附加到 div

javascript - 使用缩进/间距将元素 append 到 DOM

javascript - 如何将值作为 ng-init 的参数传递给指令

javascript - 通过 saga 取消请求

javascript - 从 ul javascript 添加/删除 <li> 元素

appendChild 方法的 Javascript 效率提升

javascript - 通过对象值渗透 JSON 响应

javascript - 使用多个可选择的选项卡

javascript - 将 JavaScript 源代码存储在 json 对象中的正确方法是什么?