Javascript 为什么任务没有';是否不从本地存储中删除?
当我按下delete task(x符号)时,它会从UI中删除任务,然后搜索本地存储以将其删除,我遇到了一个问题。从存储中删除的功能运行良好,我通过控制台检查了它。比较UI中的任务文本和本地存储中的任务数组中的任务文本时,唯一的问题是:它们是相同的,都是字符串,但仍然不起作用,当您重新加载页面时,任务仍然在页面上,并且没有从本地存储中删除储藏Javascript 为什么任务没有';是否不从本地存储中删除?,javascript,local-storage,Javascript,Local Storage,当我按下delete task(x符号)时,它会从UI中删除任务,然后搜索本地存储以将其删除,我遇到了一个问题。从存储中删除的功能运行良好,我通过控制台检查了它。比较UI中的任务文本和本地存储中的任务数组中的任务文本时,唯一的问题是:它们是相同的,都是字符串,但仍然不起作用,当您重新加载页面时,任务仍然在页面上,并且没有从本地存储中删除储藏 您的解决方案有几个问题 为了直接回答您的问题,它没有删除的原因是,当您在addTask函数中将任务添加到HTML中时,元素的textContent最终成为
您的解决方案有几个问题 为了直接回答您的问题,它没有删除的原因是,当您在
addTask
函数中将任务添加到HTML中时,元素的textContent
最终成为'task'
(请注意末尾的额外空间)
快速修复:
if(taskItem.textContent.trimEnd() === task){
tasks.splice(index, 1);
}
下一个问题是,您正在拼接正在迭代的数组!这将导致索引混乱,您将跳过拼接后的下一项
例如:
let x = [1,2,3,4,5];
x.forEach(function(item, index) {
if (item === 3) {
x.splice(index, 1);
}
console.log(item); // prints: 1, 2, 3, 5
});
解决此问题的最简单方法是:
tasks = tasks.filter((task, index) => taskItem.textContent.trimEnd() !== task);
你调试了吗
console.log(index,taskItem.textContent,task)
非常感谢我在“task”后面的空白处收到了它。我在第一次阅读您的解决方案时并没有注意到,我使用了trimEnd(),它工作得很好。现在我删除了空间,效果很好。再次感谢
tasks = tasks.filter((task, index) => taskItem.textContent.trimEnd() !== task);