问题描述
这是一个 DOM 元素数组,我想删除所有具有特定类的元素,在本例中为“checked-item”。我也想改变原始数组,所以我认为过滤方法是不可能的。
taskArr = [some DOM Elements]
taskArr.forEach(function (task) {
if (task.children[1].className.includes("checked-Item")) {
taskArr.splice(taskArr.indexOf(task),1);
}
});
解决方法
当列表在迭代时发生变异时,可能会产生副作用。拼接可能会导致跳过后续项目。这就是像 filter
这样的不可变函数更容易推理的原因之一。
你的错误可能是因为你在循环内拼接元素,所以如果你控制台记录任务,不是每个都会在输出中。 我找到了一个没有 foreach 的解决方案:
taskArr = [some DOM Elements]
const length = taskArr.length;
var deleted = 0;
for(var i = 0; i < length; i ++){
if(taskArr[i - deleted].children[1].className.includes("checked-Item")){
taskArr.splice(i - deleted,1);
deleted ++;
}
}