javascript - 未捕获 无法在 'removeChild' : parameter 1 is not of type 'Node' 上执行 'Node'

标签 javascript removechild dom-manipulation typeerror

我对在 JavaScript 中操作 DOM 很陌生,并尝试创建一个待办事项列表,该列表使用输入的文本值添加列表项,并在单击列表项时删除列表项。 我已经看到有几种方法和更短的方法可以做到这一点,但我试图以最简单的方式来做到这一点,以便更舒适地操作 DOM 中的元素。

当我单击列表项时,出现错误“无法在“Node”上执行“removeChild”:参数 1 的类型不是“Node””。在控制台中 从文档中,如果“页面的 DOM 上不存在子项”,我会收到此错误

但据我了解,我的 li 确实存在于页面的 DOM 上。

有人可以向我解释一下,就像我 5 岁一样,非常简单且无需使用术语,我是如何出错的以及为什么会出现此错误?

请注意,我已经尝试回答堆栈上发布的类似问题的问题:例如。以“正确”的方式使用removeChild

taskList.removeChild(document.querySelectorAll("li")); 

但我不认为这是问题所在?

也想仅使用普通/普通 js 来解决这个问题

提前谢谢

HTML

<ul id="taskList">
    <li>example</li>
</ul>
<input type="text" id="addTaskInput">
<button id="addTaskButton">Add Task</button>

JavaScript

const taskList = document.querySelector("#taskList");
const addTaskInput = document.querySelector("#addTaskInput");
const addTaskButton = document.querySelector("#addTaskButton");
let taskItem = document.querySelectorAll("li");


addTaskButton.addEventListener("click", () => {
let taskItem = document.createElement("li");
taskItem.textContent = addTaskInput.value;
taskList.appendChild(taskItem);
addTaskInput.value = " ";
});

for (let i = 0; i < taskItem.length; i++) {
taskItem[i].addEventListener("click", () => {
taskList.removeChild(taskItem); 
 });
}

最佳答案

由于removeChild需要一个节点,也许您只需要当前项目:

for (let i = 0; i < taskItem.length; i++) {
    taskItem[i].addEventListener("click", () => {
        taskList.removeChild(taskItem[i]); 
    });
}

关于javascript - 未捕获 无法在 'removeChild' : parameter 1 is not of type 'Node' 上执行 'Node',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46029945/

相关文章:

javascript - Angularjs 从 Json 对象中删除子对象

jQuery addClass 仅适用于 ul child

javascript - 循环遍历具有组合在一起的元素的 jQuery 对象

jquery 正则表达式替换 href

javascript - 将复选框文本值保存到数组

javascript - 在 React Native 中循环 Json 和显示

javascript - 错误 : Components. utils undefined - Firefox 附加组件

javascript - 当区域重复时如何正确从 Open Layers v4.2、API 获取坐标

javascript - 为什么javascript中的点击事件仅在第二次点击时删除列表项

entity-framework-4 - 从集合中移除()不会将对象标记为已删除 - EF4