javascript - 无法从待办事项列表中删除最后一项

标签 javascript

我制作了一个简单的待办事项列表,到目前为止它有 2 个功能。勾选一个项目并从列表中删除一个项目。

如果我从列表底部开始删除,我可以删除所有项目,但是当我从顶部删除时,第一个项目被删除,第二个项目(现在是第一个),删除它之后的项目然后没有'当我点击 X 时 t 自行删除

我认为 stopPropagration() 会有所帮助,但似乎没有帮助。它只会阻止其他已检查的功能运行。

<ul>
  <li><span>X</span> Code something</li>
  <li><span>X</span> Wake up early</li>
  <li><span>X</span> Buy popcorn</li>
</ul>
/**
 * This strikes through list item on click once and item is marked as done
 */
const listItem = document.getElementsByTagName('li')

for (let i = 0; i < listItem.length; i++) {
  listItem[i].addEventListener('click', () => {
    listItem[i].classList.toggle('checked')
  })
}

/**
 * This deletes an item from the list on click
 */
const deleteItem = document.getElementsByTagName('span')

for (let i = 0; i < deleteItem.length; i++) {
  deleteItem[i].addEventListener('click', e => {
    deleteItem[i].parentNode.remove()
    e.stopPropagation()
  })
}

https://jsfiddle.net/k2u8mqes/

预期的结果是我应该能够以任何顺序删除每个项目

最佳答案

您的 for 循环将一些点击分配给与您预期不同的元素。

此建议使用click 事件的目标来实时决定需要删除的内容。 (具体来说,它删除了 li,它是被点击的 span 的父级。)

document.addEventListener("click", checkLi);
document.addEventListener("click", deleteSpanParent);

function checkLi(event){
  if(event.target.tagName == "LI"){
    event.target.classList.toggle("checked");
    event.target.style.color = "grey";
  }
}

function deleteSpanParent(event){
  if(event.target.tagName == "SPAN"){
    let span = event.target, li = span.parentNode, ul = li.parentNode;
    ul.removeChild(li);
  }
}
<ul>
  <li><span>X</span> Code something</li>
  <li><span>X</span> Wake up early</li>
  <li><span>X</span> Buy popcorn</li>
</ul>

关于javascript - 无法从待办事项列表中删除最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55859688/

相关文章:

javascript - 在 Javascript 中添加类之间的 CSS 转换

javascript - 我如何为单独的对象数组对每个对象的属性求和?

javascript - 无法弄清楚我的 Carousel 出了什么问题

javascript - 使用变异观察器查找新出现的 DOM 类?

javascript - 按值获取单元格

javascript - 使用 JavaScript 在 HTML 页面中处理 session

javascript - 从 session 存储中设置和获取状态 react

javascript - 单击数据表中的单元格时获取列名和行名

javascript - 表单结果立即被 jQuery 覆盖

php - 如何检测访客的国家/地区?