开发待办列表时调用.parentNode返回undefined触发removeChild报错是什么原因?
报错原因
- 你代码中定义的
fpp是document.querySelectorAll("li")的返回值,该方法返回的是包含所有匹配li元素的NodeList集合,不是单个DOM元素,集合本身不存在parentNode属性,所以调用fpp.parentNode会返回undefined,触发报错。 - 就算你遍历初始的
fpp删除元素,这个集合是页面首次加载时静态获取的,后续通过新增功能添加的li元素不会被包含在这个集合里,无法删除新增的任务。
修复方案
直接操作任务列表的父元素padre(也就是id为lista的ul元素)清空所有子元素即可,最简洁的实现方式如下:
// 删除所有任务 function apagar(e){ padre.innerHTML = '' console.log("已清空所有任务") }
如果你希望用removeChild的逻辑实现,也可以用循环删除的写法:
function apagar(e){ while(padre.firstChild){ padre.removeChild(padre.firstChild) } }
另外你原来的新增任务函数也可以做小优化,避免新增空任务,新增后自动清空输入框:
// 新增任务 function enviar(e){ let escrito = tarefa.value.trim(); // 空内容不执行新增逻辑 if(!escrito) return const coisa = document.createElement("li") coisa.innerHTML = escrito padre.appendChild(coisa) // 新增完成后清空输入框 tarefa.value = '' }
内容的提问来源于stack exchange,提问作者André Santos
相关产品推荐
相关产品推荐

