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/