Uncaught未能执行' removeChild' on'节点':参数1不是类型'节点'

时间:2017-09-04 03:34:04

标签: javascript removechild dom-manipulation uncaught-typeerror

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

当我点击列表项时,我收到错误"无法执行' removeChild' on'节点':参数1不是类型' Node'。"在控制台中 从文档中我会得到这个错误,如果"孩子在页面的DOM上不存在"

但据我所知,我的李确实存在于页面的DOM上。

有人可以像我一样向我解释,非常简单地减去行话,我怎么会出错,为什么我会收到这个错误?

请注意我已经尝试过关于堆栈上发布的类似问题的答案:例如。使用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); 
 });
}

1 个答案:

答案 0 :(得分:1)

由于removeChild需要一个节点,或许你只想要当前的项目:

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