我的递归函数没有正确删除所有 children
My recursive function not properly remove all children
此代码删除所有容器的 children,并设置每个 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循环。我怎样才能同时删除 children?
的级别
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;
}
}
}
}
你也应该在递归调用返回后调用 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]);
}
}
此代码删除所有容器的 children,并设置每个 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循环。我怎样才能同时删除 children?
的级别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;
}
}
}
}
你也应该在递归调用返回后调用 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]);
}
}