You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript移除Todo App中带有checked类的li元素

Todo App 删除已完成任务问题解决

问题场景

开发Todo App(JS新手),无法移除用户输入生成的、带有checked类的已完成任务(对应li.checked元素),原代码如下:

原HTML代码

<div class="todo-container">
<ul class="todo-list">
<li class="checked">completed task</li>
<li>Uncompleted task</li>
</ul>
</div>
<div class="btn" onclick="deletecompletedTask()"> deleteAll</div>

原JS代码

const btn = document.querySelector(".btn");
const todoContainer = document.querySelector('.todo-container');
const todolist = document.querySelector('.todo-list');

//Delete completed task
function deletecompletedTask(){
todoContainer.innerhtml = document.getElementByClassName('checked');
todoContainer.removeChild(todoContainer.firstChild);
}

错误分析

  • JS大小写敏感:innerhtml应该写成innerHTML
  • 方法名错误:getElementByClassName应为getElementsByClassName(复数Elements),且该方法返回元素集合,不能直接赋值给innerHTML
  • 删除逻辑错误:当前代码试图修改容器innerHTML并删除第一个子元素,完全不符合删除所有已完成任务的需求

正确实现

修正后的HTML(补全onclick的闭合引号)

<div class="todo-container">
  <ul class="todo-list">
    <li class="checked">completed task</li>
    <li>Uncompleted task</li>
  </ul>
</div>
<div class="btn" onclick="deletecompletedTask()">deleteAll</div>

修正后的JS函数

function deletecompletedTask(){
  // 获取所有带checked类的li元素
  const completedTasks = document.querySelectorAll('.todo-list .checked');
  // 遍历删除每个已完成任务
  completedTasks.forEach(task => {
    task.remove();
  });
}

说明

  • 使用querySelectorAll获取所有匹配的已完成任务元素,它返回一个NodeList,支持forEach遍历
  • 直接调用每个元素的remove()方法即可删除自身,逻辑更清晰且不易出错

内容的提问来源于stack exchange,提问作者Lemnsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:02:33