我在用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;
}
|-----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;
}
-------------
<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>
我只是觉得在我这个递归的方法可能有点问题,请高手赐教!
azhoulia(回忆录.NET) ( ) 信誉:100
只循环了递归第一个根节点.
没有向下读.....-----
我碰到的正是这个问题啊