亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在刪除列表項 [Js DOM] 時,removeChild() 不起作用?

為什么在刪除列表項 [Js DOM] 時,removeChild() 不起作用?

牛魔王的故事 2023-10-17 15:52:41
這是一個購物清單,您可以在其中添加一些商品名稱,它將顯示該商品。刪除該項目時,它將刪除該項目。最后,單擊該項目后,它將標記為已完成。因此,創建項目和刪除項目工作正常,但單擊它們時會出現問題。問題(切換多個列表項時發生)假設您添加了 3 個項目(xxx、yyy、zzz),單獨單擊它們時,會將它們切換為完整和不完整。但是 如果您選擇了 xxx、它們 zzz,如果您再次單擊 zzz,則不會正在工作。而如果點擊xxx,則會標記為不完整。錯誤script.js:91 Uncaught DOMException: 無法在“Node”上執行“removeChild”:要刪除的節點不是此節點的子節點。在 HTMLLIElement.toggleItem這是我的代碼。let input = document.querySelector("#item-name");let button = document.querySelector("input[type=button]");let items = document.querySelector(".items");let ul = document.createElement("ul");items.appendChild(ul);function disableFunction() {  button.disabled = false;}function callfun(event) {  if (event.keyCode === 13) {    console.log("Enter is pressed...");    createList();  }}input.addEventListener("input", disableFunction);button.addEventListener("click", createList);input.addEventListener("keypress", callfun);function createList() {  createList();}function createList() {  if (input.value.length) {    let li = document.createElement("li");    li.className = "item";    let val = input.value;    if (val.length > 10) {      li.appendChild(document.createTextNode(val.slice(0, 7) + "..."));    } else {      li.appendChild(document.createTextNode(input.value));    }    let btn = document.createElement("button");    let i = document.createElement("i");    i.className = "fa fa-trash fa-2x";    btn.appendChild(i);    btn.addEventListener("click", deleteItem);    //   '<i class="fa fa-trash " aria-hidden="true"></i>';    //i = document.getElementsByTagName(i);    li.appendChild(btn);    ul.appendChild(li);    input.value = "";    li.addEventListener("click", toggleItem);    console.log("added...");  }}function deleteItem(e) {  //   console.log(e, e.target.parentElement.parentElement)  let item = e.target.parentElement.parentElement;  item.style.display = "none";}
查看完整描述

1 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

來自MDN上的 QuerySelector() 方法:

Document 方法 querySelector() 返回文檔中與指定選擇器或選擇器組匹配的第一個元素。如果未找到匹配項,則返回 null。

所以當你寫:

let?spa?=?document.querySelector(
??`${liItem.tagName.toLowerCase()}?.completed`
??);

您將獲得 DOM 上與您的搜索匹配的第一個元素。但是您正在尋找 liItem 的子元素,其類別為“completed”。

你想寫什么:

let?spa?=?liItem.querySelector(".completed");

額外注意:?.toggle("aClass") 方法在元素沒有類“aClass”時添加它,如果元素已經有它,則將其刪除。因此您可以采取以下措施

liItem.classList.toggle("toggle");

脫離 if-else 并應用它。


查看完整回答
反對 回復 2023-10-17
  • 1 回答
  • 0 關注
  • 194 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號