javascript - 使用类名从数组中删除
问题描述
我正在创建一个简单的 TodoList 来创建和删除任务:
let btn= document.getElementById("createButton");
let tasks= [];
//function for creating task. This is working fine
btn.addEventListener('click', function(){
let taskName= document.getElementById("taskName").value;
let startTime= document.getElementById("startTime").value;
let endTime= document.getElementById("endTime").value;
// console.log(taskName, startTime, endTime);
let currTask= {
name: taskName,
start: startTime,
end: endTime
}
tasks.unshift(currTask);
let createdTask= document.createElement('div');
createdTask.id= taskName;
createdTask.classList.add("mrg-auto");
createdTask.innerHTML= `
<p>Task name: ${taskName}</p>
<p>Start time: ${startTime}</p>
<p>End time: ${endTime}</p>
<input type="submit" class="deleteButton" value="Delete">`;
document.getElementsByTagName("main")[0].append(createdTask);
// console.log(tasks.length);
})
//code from here does not work. This is the code for deletion
var del= document.getElementsByClassName("deleteButton");
for(let i=0;i<del.length;i++){
del[i].addEventListener('click', function(){
for(var j=0;j<tasks.length;j++){
if(tasks[j].name==del[i].id){
tasks.splice(j, 1);
console.log("hello");
break;
}
}
});
}
我无法使用类名和拼接函数从数组中删除任务。我哪里错了?
解决方案
如何不循环元素,而是将事件处理程序附加到文档。像这样:
document.addEventListener('click',function(e){
if(e.target && e.target.className == 'deleteButton'){
e.target.parentNode.parentNode.removeChild(e.target.parentNode)
tasks.splice(tasks.findIndex(({name}) => name == e.target.parentNode.id), 1);
}
});
PS:请注意,将 id 作为 taskName
createdTask.id= taskName;
可能不是最佳做法。
推荐阅读
- flutter - 在dailpad中填写号码需要添加权限吗
- php - 如何在laravel中将数组插入数据库而不会出错
- php - Yii2 SQLSTATE[IMSSP]:活动结果集中没有更多行
- r - 如何一起使用 lapply 和 ifelse 但在 R 中的 df 中保留原始值
- css - 如何使用css使子元素垂直位于父元素的中间?
- .net-core - 带有 Azure AD API 范围和 Graph 范围的访问令牌不在 Microsoft Graph 上进行身份验证
- cypress - 如何处理cypress中的测试失败
- reactjs - 如何在反应导航 5 中将图像添加到抽屉中?
- powershell - 更改 Powershell 表中第一行的文本颜色
- python - 如何找到重叠的intervalIndex pandas