我在用js递归遍历TreeView的时候碰到了以下问题root
 |-----a
 |     |----a1
 |     |----a2
 |     |    |----a21
 |
 |-----b
 |     |----b1
 | 
 |-----c   
递归的时候并不遍历所有节点
当执行到a21的时候就会停止执行,而不会执于b,c的遍历,代码如下
var AllRootNode=new Array();
AllRootNode=TreeView1.getChildren();
sn=SelectedNode(AllRootNode);function SelectedNode(Nodes)
{
var sn='';
if(parseInt(Nodes.length)==0)
return;
else
{
for(i=0;i<Nodes.length;i++)
{
var cNode;
cNode=Nodes[i];
if(cNode.getAttribute("Checked")==true)
{
sn+=cNode.getAttribute("ID")+'|';
}
if(parseInt(cNode.getChildren().length)!=0)
sn+=SelectedNode(cNode.getChildren());

}
}
return sn;
}

解决方案 »

  1.   

    给个例子,自己套入数据就就行了
    -------------
    <html>
    <head>
    <title>EvE HTML 无限级分类的实现</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <link href="style.css" type="text/css" rel="stylesheet" />
    <script language="JavaScript" src=""></script>
    <style type="text/css" title="">
    body,td,select{font-size: 12px;}
    </style>
    </head>
    <body bgcolor="#eeeeee" text="#000000">
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    /*
    数据库 新闻分类 表结构:
    ClassID : 索引,自动编号
    CTitle : varchar 100字节,记录分类名称
    ParentID : 数字,记录属于哪个分类,0为根分类
    LayerID : 数字,记录处于多少层 根分类为0层,以后递增1(这样在列表框中显示整齐)
    */
    var dataArray = {};
    var tempArray = {};
    // 数 组: {ParentID, ClassID, CTitle, LayerID }
    //分割符: _@@_
    tempArray[0]="0_@@_1_@@_分类一名称_@@_0";
    tempArray[1]="1_@@_2_@@_分类二名称_@@_1";
    tempArray[2]="2_@@_3_@@_分类三名称_@@_2";
    tempArray[3]="0_@@_4_@@_分类四名称_@@_0";
    tempArray[4]="4_@@_5_@@_分类五名称_@@_1";
    tempArray[5]="2_@@_6_@@_分类六名称_@@_2";
    tempArray[6]="2_@@_7_@@_分类七名称_@@_2";var y = 0;
    var xx = "";function loadNextType(upid)
    {
        for(var key in tempArray)
    {
    var temps = tempArray[key].split("_@@_");
    var z = temps[1];
    if(temps[0] == upid)
    {
    y += 1;
    xx = "";
    for(k = 0; k < parseInt(temps[3]); k++)
    {
    if(k != parseInt(temps[3])-1) 
    xx += "│";
    else
    xx += "├┈";
    }
    dataArray[y] = temps[0] + "_@@_" + temps[1] + "_@@_" + xx + temps[2];
    loadNextType(z);
    }
    }
    }for(var key in tempArray)
    {
    var tmp = tempArray[key].split("_@@_");
    if(tmp[0] == 0)
    {
    dataArray[y] = tmp[0] + "_@@_" + tmp[1] + "_@@_" + "├" + tmp[2];
    loadNextType(tmp[1]);
    y += 1;
    }
    }
    //-->
    </SCRIPT><span style="border:1px solid #000000; position:absolute; overflow:hidden;" > 请选择 -->
    <select name="fenlei" style="margin:-2px;" onchange="alert(this.value);" size=1>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    for(var key in dataArray)
    {
    var tp = dataArray[key].split("_@@_");
    document.write('<option value=' + tp[1] + '>' + tp[2] + '</option>');
    }
    //-->
    </SCRIPT>
    </select>
    </span></body>
    </html>
      

  2.   

    我用的是TreeView,我觉得TreeView很好的。。
    我只是觉得在我这个递归的方法可能有点问题,请高手赐教!
      

  3.   


    azhoulia(回忆录.NET) ( ) 信誉:100 
    只循环了递归第一个根节点.
    没有向下读.....-----
    我碰到的正是这个问题啊
      

  4.   

    原来是我在定义i的时候没有用var声明