Mat*_*rym 25 javascript recursion children loops for-loop
我有以下内容:
for (var i = 0; i < children.length; i++){
if(hasClass(children[i], "lbExclude")){
children[i].parentNode.removeChild(children[i]);
}
};
Run Code Online (Sandbox Code Playgroud)
我希望它能够遍历所有孩子的孩子等(不仅仅是顶层).我找到了这条线,似乎这样做:
for(var m = n.firstChild; m != null; m = m.nextSibling) {
Run Code Online (Sandbox Code Playgroud)
但是,如果我进行转换,我不清楚我如何引用当前的孩子?我不再需要澄清孩子的指数位置.有什么建议?
谢谢!
更新:
根据答案的建议,我现在正在使用以下内容.这是正确/最有效的方式吗?
function removeTest(child) {
if (hasClass(child, "lbExclude")) {
child.parentNode.removeChild(child);
}
}
function allDescendants(node) {
for (var i = 0; i < node.childNodes.length; i++) {
var child = node.childNodes[i];
allDescendants(child);
removeTest(child);
}
}
var children = temp.childNodes;
for (var i = 0; i < children.length; i++) {
allDescendants(children[i]);
};
Run Code Online (Sandbox Code Playgroud)
Que*_*tin 44
function allDescendants (node) {
for (var i = 0; i < node.childNodes.length; i++) {
var child = node.childNodes[i];
allDescendants(child);
doSomethingToNode(child);
}
}
Run Code Online (Sandbox Code Playgroud)
循环遍历所有子元素,并为每个元素调用相同的函数并使其循环遍历该元素的子元素.
Jam*_*mes 31
通常,您有一个可以在所有节点上递归调用的函数.这真的取决于你想对孩子们做些什么.如果你只是想收集所有的后代,那么element.getElementsByTagName可能是一个更好的选择.
var all = node.getElementsByTagName('*');
for (var i = -1, l = all.length; ++i < l;) {
removeTest(all[i]);
}
Run Code Online (Sandbox Code Playgroud)