此代码删除所有容器的子代,并设置每个children = null以释放内存。 myElement 的结构并不总是一样的,所以我想要一个动态的东西。
var cont1 = myElement.children.length;
for(var i = cont1 - 1 ; i >= 0 ; i--){
var cont2 = myElement.children[i].children.length;
for (var j = cont2 - 1; j >= 0; j--) {
var cont3 = myElement.children[i].children[j].children.length;
for (var k = cont3 - 1; k >= 0; k--) {
var cont4 = myElement.children[i].children[j].children[k].children.length;
for (var w = cont4 - 1; w >= 0; w--) {
myElement.children[i].children[j].children[k].remove(myElement.children[i].children[j].children[k].children[w]);
myElement.children[i].children[j].children[k].children[w] = null;
}
myElement.children[i].children[j].remove(myElement.children[i].children[j].children[k]);
myElement.children[i].children[j].children[k] = null;
}
myElement.children[i].remove(myElement.children[i].children[j]);
myElement.children[i].children[j] = null;
}
myElement.remove(myElement.children[i]); //i loop
myElement.children[i] = null; //i loop
}
这是我的递归测试功能。 似乎只是部分工作。第一级不会被删除,它将是旧代码的 i 循环。我怎样才能删除那个级别的孩子?
function deleteRecursive(element){
if(element.children.length > 0){
for(var i = element.children.length - 1 ; i >= 0 ; i--){
if(element.children[i].children.length > 0){
deleteRecursive(element.children[i]);
}else{
element.remove(element.children[i]);
element.children[i] = null;
}
}
}
}
答案 0 :(得分:0)
从递归呼叫回来后,您也应该呼叫remove
。
注意:第一个if
不是必需的,因为for
循环已经检查了这个条件。并且你可以在递归调用函数之前删除你做的类似检查,因为递归调用将在for
循环中检查它:
function deleteRecursive(element){
for(var i = element.children.length - 1 ; i >= 0 ; i--){
deleteRecursive(element.children[i]);
element.remove(element.children[i]);
}
}