JavaScript 数组在循环外是正确的,但在循环内未定义

JavaScript Array is correct outside loop but undefined inside loop

本文关键字:循环 未定义 数组 JavaScript      更新时间:2023-09-26
function deleteList () {
    var toDoList;
    toDoList = document.getElementById("todo");
    var listArray = document.getElementsByTagName("li");
    console.log(listArray);
    /* returns correctly: [li#first.kitchen, li#second.kitchen,
    li#third.kitchen, li#fourth, first: li#first.kitchen, etc... */
    for (var i = 0; i < listArray.length; i++); {
        var listItemHolder = listArray[i];
        console.log(listItemHolder);
        /* Returns undefined */
        toDoList.removeChild(listItemHolder); 
    } 
}

我只是制作一个简单的待办事项列表,允许用户在按下执行此功能的"删除按钮"时删除所有项目。

我尝试过的:

  • 删除 listItemHolder 并仅使用 .removeChild(listArray[i])。
  • 将 for 循环的周期更改为 i<4

任何关于正在发生的事情的解释将不胜感激!谢谢

它是 for 循环右括号后面的;

删除它

for (var i = 0; i < listArray.length; i++) {

发生了什么事?
您有一个空的 for 循环体,带有此;循环后i的值为 listArray.lengthlistArray[listArray.length]未定义

您还必须向后循环。
所以相反,你应该使用

for (var i = listArray.length-1; i >= 0; i--) {

否则,您只会删除列表中的每一项。
怎么会这样?看这里首先你有这个列表

0: todo 1
1: todo 2
2: todo 3
3: todo 4

当你删除了第一个时,你就有了这个

0: todo 2
1: todo 3
2: todo 4

而你的计数变量 i 的值为 1。下一个要删除的是待办事项 3

0: todo 2
1: todo 4

这是结束