Javascript 动态删除带有divs.Only JS的列表

Javascript 动态删除带有divs.Only JS的列表,javascript,javascript-events,Javascript,Javascript Events,当我选中所有复选框并按下按钮时,始终会保留最后一个节点。 我知道这是因为parentNode,因为DOM树上的索引仍然在内存中,或者类似的东西。 如果有人能帮助我了解该做什么,我将不胜感激 函数deleteChecked{ var node_listFields=document.getElementsByClassName'fields'; var复选框=document.getElementsByClassNamecheck; 对于变量i=0;i

当我选中所有复选框并按下按钮时,始终会保留最后一个节点。 我知道这是因为parentNode,因为DOM树上的索引仍然在内存中,或者类似的东西。 如果有人能帮助我了解该做什么,我将不胜感激

函数deleteChecked{ var node_listFields=document.getElementsByClassName'fields'; var复选框=document.getElementsByClassNamecheck; 对于变量i=0;i这是因为GetElementsByCassName返回的HTMLCollection对象是活动的,这意味着当您删除其中的节点时,它会自动更新,因此,您的i现在指向一个错误的项,这会在一次删除后导致错误,这就是为什么只有一个项被删除

正确的方法是将其转换为数组或使用document.querySelectorAll,后者返回一个非活动列表

函数deleteChecked{ var node_listFields=document.getElementsByClassName'fields'; //这将转换为数组。 var noderray=[].slice.callnode_列表字段; var onlyCheckedArray=noderray.filterfunction findIfCheckboxIsCheckednode{ //如果选中此节点内的复选框,则返回。 返回节点.querySelector'.check'.checked; } //这里,onlyCheckedArray是一个只有选中复选框的节点的数组。 //所以让我们把它们全部移除! 仅限CheckDarray.forEachfunction RemoveNode{ node.parentNode.removeChildnode; }; } Θέρμανση Διάφορα ΔιάφραYλικά 这是因为GetElementsByCassName返回的HTMLCollection对象是活动的,这意味着当您删除其中的节点时,它会自动更新,因此,您的i现在指向一个错误的项,这会在一次删除后导致错误,这就是为什么只有一个项被删除

正确的方法是将其转换为数组或使用document.querySelectorAll,后者返回一个非活动列表

函数deleteChecked{ var node_listFields=document.getElementsByClassName'fields'; //这将转换为数组。 var noderray=[].slice.callnode_列表字段; var onlyCheckedArray=noderray.filterfunction findIfCheckboxIsCheckednode{ //如果选中此节点内的复选框,则返回。 返回节点.querySelector'.check'.checked; } //这里,onlyCheckedArray是一个只有选中复选框的节点的数组。 //所以让我们把它们全部移除! 仅限CheckDarray.forEachfunction RemoveNode{ node.parentNode.removeChildnode; }; } Θέρμανση Διάφορα ΔιάφραYλικά
我也有同样的问题,用回归迭代法解决了

就我的理解而言,DOM节点索引始终必须是固定的:0,1,2,3…:


渐进迭代i=0;我有同样的问题,用回归迭代法解决了它

就我的理解而言,DOM节点索引始终必须是固定的:0,1,2,3…:



渐进迭代i=0;我是否已尝试在复选框中注册onchange事件?也许这可以帮助你…你似乎得到了一个复选框列表,然后试图修改一个不同的列表?我看到一些错误,例如未捕获的TypeError:未能在“节点”上执行“removeChild”:参数1不是“节点”类型。因为当您点击fields类的parentNode时正在访问主体?第二个答案是正确的,但你能简单地解释一下吗。。。我是学生您是否尝试在复选框中注册onchange事件?也许这可以帮助你…你似乎得到了一个复选框列表,然后试图修改一个不同的列表?我看到一些错误,例如未捕获的TypeError:未能在“节点”上执行“removeChild”:参数1不是“节点”类型。因为当您点击fields类的parentNode时正在访问主体?第二个答案是正确的,但你能简单地解释一下吗。。。我是一名学生,每次你删除时我都会减少。@null是的,那就行了。但我发现,指示数组上的迭代比指示数值变量上的向后迭代可读性强得多,后者恰好在数组内部调用了数组或者每次删除时都减少i。@null是的,这样就行了。但我发现,指示数组上的迭代比指示数值变量上的向后迭代可读性强得多,后者恰好在数组内部调用了数组这很聪明!我之所以打勾是因为这个原因:为什么会发生这种情况?哈,好吧,我知道它是静态的,因为你使用的标签不是类名…不聪明但仍然优雅是的。我按标记名和类型过滤DOM。至于类名,
@第二个Rikudo解释了为什么会发生这种情况。但是,即使使用i++按标记和类型进行过滤也会导致问题:这非常聪明!我之所以打勾是因为这个原因:为什么会发生这种情况?哈,好吧,我知道它是静态的,因为你使用的标签不是类名…不聪明但仍然优雅是的。我按标记名和类型过滤DOM。至于类名,@Second Rikudo解释了为什么会这样。但即使使用i++按标记和类型进行过滤也会导致问题:
var inputElems = document.getElementsByTagName("input");
for(var i = 0; i<inputElems.length; i++){
    if(inputElems[i].type === "checkbox" && inputElems[i].checked === true) {
        inputElems[i].parentNode.remove();
    }
}
var inputElems = document.getElementsByTagName("input");
for(var i = inputElems.length-1; i>= 0; i--){
    if(inputElems[i].type === "checkbox" && inputElems[i].checked === true) {
        inputElems[i].parentNode.remove();
    }
}