0

我很新操作JavaScript中的DOM並試圖做一個列表項,使用輸入的文本值,並在單擊列表項時刪除列表項。 我看到有幾種方法,也有更短的方法來做到這一點,但我試圖用最簡單的方法來操作DOM中的元素。未捕獲無法執行'節點'上的'removeChild':參數1不是'節點'類型

當我點擊一個列表項目時,出現錯誤「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); 
}); 
} 
+3

如果您試圖用'querySelectorAll'調用'removeChild',那麼您會遇到問題。 'querySelectorAll'返回一個列表,但'removeChild'需要一個節點。 – jmargolisvt

回答

1

由於removeChild之需要一個節點,也許你只想要當前的項目:

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