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

如何在待办事项应用中标记任务完成且不影响删除图标?

解决方案

1. 修复删除线影响图标的样式问题

问题核心是checked类直接加在<li>上,导致内部所有子元素都继承删除线样式。可以通过两种方式解决:

方式一:单独排除删除图标的样式

给删除图标添加专属类名(比如delete-icon),然后在CSS中取消它的删除线:

.checked {
  text-decoration: line-through;
}
.checked .delete-icon {
  text-decoration: none;
}

方式二:拆分任务结构(更推荐)

把任务文本和删除图标分开包裹,让删除线只作用于任务文本:

<li>
  <span class="task-content">你的待办任务内容</span>
  <span class="delete-icon">×</span>
</li>

对应的CSS:

.checked .task-content {
  text-decoration: line-through;
}

2. 优化事件委托逻辑(避免点击任务文本不触发状态切换)

原代码只判断点击目标是<li>或<span>,但如果点击任务文本(比如上面的.task-content),target.tagName不是<li>,就不会触发状态切换。可以用closest()方法找到最近的<li>元素,确保点击任务区域内的非图标元素都能触发状态切换:

listContainer.addEventListener(
  "click",
  function (delCheck) {
    const targetLi = delCheck.target.closest("li");
    // 点击删除图标时移除任务
    if (delCheck.target.classList.contains("delete-icon")) {
      targetLi.remove();
    } 
    // 点击任务其他区域时切换完成状态
    else if (targetLi) {
      targetLi.classList.toggle("checked");
    }
  },
  false
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:42:03