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

标签 javascript

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.length,并且 listArray[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。接下来要删除的是 todo 3

0: todo 2
1: todo 4

到这里就结束了

关于JavaScript 数组在循环外是正确的,但循环内未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135842/

相关文章:

javascript - 使用 Javascript 推送嵌套数组注释

javascript - masonry 布局问题

javascript - 每 3 个项目拆分 ng-repeat

javascript - 从Javascript中的Kendo网格中的列名获取列索引

javascript - 为什么这个 !important CSS 值会被覆盖?

javascript - jQuery addClass()/removeClass() 不工作

javascript - 尝试从 html 读取数据时出现 w.fn.init 错误

JavaScript 替换电子邮件地址

javascript - JavaScript 运行时如何工作?

javascript - 在 Javascript 中 "element.scrollHeight"相当于 "window"?