今天写一个递归程序求一棵树节点的所有子节点,方法是这样的
function getAllChildNodes() {
node = tree.getSelected();
var aryNodeId = new Array();
[b]getChildNodesByCurrentNode(node,aryNodeId);[/b]
alert(aryNodeId.toString());
}
function getChildNodesByCurrentNode(node,aryNodeId) {
try {
[b]for(i=0;i<node.childNodes.length;i++) [/b]{
var cnode = node.childNodes[i];
aryNodeId.push(cnode.text);
if(cnode.childNodes.length>0) {
getChildNodesByCurrentNode(cnode,aryNodeId);
}
}
}catch(e) {
alert(e);
}
}
其中我的递归函数getChildNodesByCurrentNode无论如何不能获得我想要的结果,只是取得了一个枝节点的所有数据,让我很是郁闷,后来把程序并给了同事让他帮我检查一下,发现了问题的所有,就是var的定义,即for循环中我少了var i=0.........
正确的方法是
function getChildNodesByCurrentNode(node,aryNodeId) {
try {
[b]for(var i=0;i<node.childNodes.length;i++) [/b]{
var cnode = node.childNodes[i];
aryNodeId.push(cnode.text);
if(cnode.childNodes.length>0) {
getChildNodesByCurrentNode(cnode,aryNodeId);
}
}
}catch(e) {
alert(e);
}
}
大功告成,唉,真是活到老学到老,遇上了才发现原来一个小小的var原来作用大大呀,呵呵
function getAllChildNodes() {
node = tree.getSelected();
var aryNodeId = new Array();
[b]getChildNodesByCurrentNode(node,aryNodeId);[/b]
alert(aryNodeId.toString());
}
function getChildNodesByCurrentNode(node,aryNodeId) {
try {
[b]for(i=0;i<node.childNodes.length;i++) [/b]{
var cnode = node.childNodes[i];
aryNodeId.push(cnode.text);
if(cnode.childNodes.length>0) {
getChildNodesByCurrentNode(cnode,aryNodeId);
}
}
}catch(e) {
alert(e);
}
}
其中我的递归函数getChildNodesByCurrentNode无论如何不能获得我想要的结果,只是取得了一个枝节点的所有数据,让我很是郁闷,后来把程序并给了同事让他帮我检查一下,发现了问题的所有,就是var的定义,即for循环中我少了var i=0.........
正确的方法是
function getChildNodesByCurrentNode(node,aryNodeId) {
try {
[b]for(var i=0;i<node.childNodes.length;i++) [/b]{
var cnode = node.childNodes[i];
aryNodeId.push(cnode.text);
if(cnode.childNodes.length>0) {
getChildNodesByCurrentNode(cnode,aryNodeId);
}
}
}catch(e) {
alert(e);
}
}
大功告成,唉,真是活到老学到老,遇上了才发现原来一个小小的var原来作用大大呀,呵呵