Javascript 完成一个项目会在其自身的函数中添加两行新内容
在我看了一个教程之后,我自己重新创建了一个待办事项列表,而且一切都很好,至少99%都是这样。只有一个小问题,没有什么破坏交易,但它困扰了我很多,因为我无法在函数中找到问题的根源,尽管我已经使用调试器缩小了问题的范围。问题本身是,每当我在待办事项列表中将一个项目标记为“已完成”时,它都会向其添加两行新的空行(就像有人按字面上的Enter x2,这就是它在控制台日志中的显示方式)。问题发生在“每个项目”上,所以它不像我将一个项目标记为已完成,它会在每个项目上添加两行新行,而只是在标记/未标记的项目上。下面是一段代码,其中包含我应该将其缩小到的函数:Javascript 完成一个项目会在其自身的函数中添加两行新内容,javascript,list,Javascript,List,在我看了一个教程之后,我自己重新创建了一个待办事项列表,而且一切都很好,至少99%都是这样。只有一个小问题,没有什么破坏交易,但它困扰了我很多,因为我无法在函数中找到问题的根源,尽管我已经使用调试器缩小了问题的范围。问题本身是,每当我在待办事项列表中将一个项目标记为“已完成”时,它都会向其添加两行新的空行(就像有人按字面上的Enter x2,这就是它在控制台日志中的显示方式)。问题发生在“每个项目”上,所以它不像我将一个项目标记为已完成,它会在每个项目上添加两行新行,而只是在标记/未标记的项目上
function completeItem(){
const item = this.parentNode.parentNode;
const parent = item.parentNode;
const id = parent.id;
const value = item.innerText;
if(id === "todo"){
data.todo.splice(data.todo.indexOf(value), 1)
data.completed.push(value);
// Notification.
notification.innerHTML = "<p>Task completed.</p>";
notification.classList.add("notification");
notification.classList.add("notificationCompleted");
setTimeout(() => {
notification.classList.remove("notification");
notification.classList.remove("notificationCompleted");
notification.innerHTML = "";
}, 2000);
} else {
data.completed.splice(data.completed.indexOf(value), 1);
data.todo.push(value);
}
dataObjectUpdate();
console.log(data);
const target = (id === "todo") ? document.getElementById("completed"):document.getElementById("todo");
parent.removeChild(item);
target.insertBefore(item, target.childNodes[0]);
}
函数completeItem(){
const item=this.parentNode.parentNode;
const parent=item.parentNode;
const id=parent.id;
常量值=item.innerText;
如果(id==“待办事项”){
data.todo.splice(data.todo.indexOf(值),1)
数据。完成。推送(值);
//通知。
notification.innerHTML=“任务已完成。”;
通知.classList.add(“通知”);
notification.classList.add(“notificationCompleted”);
设置超时(()=>{
通知.classList.remove(“通知”);
notification.classList.remove(“notificationCompleted”);
notification.innerHTML=“”;
}, 2000);
}否则{
数据.已完成.拼接(数据.已完成.索引OF(值),1);
data.todo.push(值);
}
dataObjectUpdate();
控制台日志(数据);
常量目标=(id==“todo”)?document.getElementById(“已完成”):document.getElementById(“todo”);
父母。远程子女(项目);
target.insertBefore(item,target.childNodes[0]);
}
如果需要,这里还有到hastebin上整个脚本文件的链接:
.
下面是一个代码笔的链接,展示了该问题:
提前谢谢
textContent返回所有元素的文本内容,而innerText
返回所有元素的内容,除了
和
元素
如果您使用文本内容,错误将被修复 更换
const value = item.innerText;
与
是否有一些HTML与此一起使用?不多,只有无序列表,这些项目将存储在其中。其中90%是由用户输入动态创建的。当然,你还没有给我们那个HTML,所以我们必须自己重新创建它——这会耽误我们回答你的时间。我的错,这是hastebin上的HTML:不要在链接中发布问题的基本信息,把它放在你的问题中,它本身就起作用了!谢谢。顺便说一句,在Mozzila开发者版中,它与innerText配合得很好,只有在Chrome中才有这个问题。但是现在有了textContent,它就可以正常工作了。再次感谢:)
const value = item.textContent;