#######100求递归的写法,可以追加至500分,各位进来看看~~~~!#######

houjianxun 2003-11-25 11:06:12
1,≡ 电 脑 技 术 ≡,-1
2,『 技术论坛 』,1
3,≡ 休 闲 娱 乐 ≡,-1
4,『 Net专区 』,2
6,『 网站安全 』,1

上面是需要递归的数据

//-------------------------------
每组逗号最后面的数字是层次
例如:
-1是第一层,有两个≡ 电 脑 技 术 ≡和≡ 休 闲 娱 乐 ≡
≡ 电 脑 技 术 ≡的ID值是1,它下面的应该是『 技术论坛 』和『 网站安全 』
........

//------------------------------------------------------
最后的结果应该是这个样子
≡ 电 脑 技 术 ≡
『 技术论坛 』
『 Net专区 』
『 网站安全 』
≡ 休 闲 娱 乐 ≡
//------------------------------------------------------
...全文
26 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
longshenwang 2003-11-26
  • 打赏
  • 举报
回复
呵呵 看了一下 在下实在能力有限

你参考顶楼的老大说的就行了! ^_^
saucer 2003-11-26
  • 打赏
  • 举报
回复
where did you get the data? try something like

<div id="dvHtml"></div>
<script language=javascript>
var s = "1,≡ 电 脑 技 术 ≡,-1|2,『 技术论坛 』,1|3,≡ 休 闲 娱 乐 ≡,-1|4,『 Net专区 』,2|6,『 网站安全 』,1|7,ASP.NET,4|8,C#,4";

function node(id, title, pid)
{
this.id = id;
this.title = title;
this.pid = pid;
this.children = new Array();
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,"");}

var nodelist = new Array();

function window.onload()
{
var a = s.split(/\|/);
var nmin = null;
for (var i = 0 ; i < a.length; i++)
{
var a2 = a[i].split(/,/);
var id = parseInt(a2[0].trim());
var title = a2[1];
var pid = parseInt(a2[2].trim());

var o = nodelist[id];

if (o == null)
{
o = new node(id,title,pid);
nodelist[id] = o;
}

o.id = id;
o.title = title;
o.pid = pid;


if (nodelist[pid] == null)
{
nodelist[pid] = new node(pid);
}

nodelist[pid].children.push(o);

if (nmin == null || nmin > pid)
nmin = pid;

}

alert(nmin);
dvHtml.innerHTML = display(nmin, 0);
}

function display(pid,nlevel)
{
var s = "";
for (var i=0; i < nlevel; i++)
s += " ";

var o = nodelist[pid];
if (o.title != null)
s += o.id + ":" + o.title + ":" + o.pid + "<BR>";

for (var i=0; i < o.children.length; i++)
s += display(o.children[i].id, nlevel + 1);

return s;
}

</script>


houjianxun 2003-11-26
  • 打赏
  • 举报
回复
又发现点问题,还要再请教一下

//-------------------------------------
where did you get the data?
数据是从数据库读取的,但生成的规则都和上面的一样
//------------------------------------
下面的代码我稍改了一下,生成的结果是这个样子,正是我想要的
╋≡ 电 脑 技 术 ≡
│ ├『 技术论坛 』
│ │ ├『 Net专区 』
│ │ │ ├ASP.NET
│ │ │ ├C#
│ ├『 网站安全 』
╋≡ 休 闲 娱 乐 ≡

=======但为何把它放到下拉列表框里面就不是这个样子了?======
//-------------------------------------


<div id="dvHtml"></div>
<script language=javascript>
var s = "1,≡ 电 脑 技 术 ≡,-1|2,『 技术论坛 』,1|3,≡ 休 闲 娱 乐 ≡,-1|4,『 Net专区 』,2|6,『 网站安全 』,1|7,ASP.NET,4|8,C#,4";

function node(id, title, pid)
{
this.id = id;
this.title = title;
this.pid = pid;
this.children = new Array();
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,"");}

var nodelist = new Array();

function window.onload()
{
var a = s.split(/\|/);
var nmin = null;
for (var i = 0 ; i < a.length; i++)
{
var a2 = a[i].split(/,/);
var id = parseInt(a2[0].trim());
var title = a2[1];
var pid = parseInt(a2[2].trim());

var o = nodelist[id];

if (o == null)
{
o = new node(id,title,pid);
nodelist[id] = o;
}

o.id = id;
o.title = (pid==-1?"╋"+title:"├"+title);
o.pid = pid;


if (nodelist[pid] == null)
{
nodelist[pid] = new node(pid);
}

nodelist[pid].children.push(o);

if (nmin == null || nmin > pid)
nmin = pid;

}

dvHtml.innerHTML = display(nmin, 0);
}

function display(pid,nlevel)
{
var s = "";
for (var i=0; i < nlevel; i++)
s += (i==0?"":"│  ");

var o = nodelist[pid];
if (o.title != null)
s += o.title + "<BR>";

for (var i=0; i < o.children.length; i++)
s += display(o.children[i].id, nlevel + 1);

return s;
}

</script>
houjianxun 2003-11-26
  • 打赏
  • 举报
回复
感谢 saucer 的回答

我的问题解决了,早上测试了很多次,如果再有问题还会请教你

:)

结贴!
houjianxun 2003-11-26
  • 打赏
  • 举报
回复
感谢 ZHANG9652 和 triout 的解答

问题全部解决,最后采用triout的答案,主要功劳还是 saucer 的

:)
ZHANG9652 2003-11-26
  • 打赏
  • 举报
回复
开始有个死循环,调试了半天,if (pid==1)
o.title = ("| ├" + title);
if (pid==2)
o.title = ("| |  ├" + title);
if (pid==3)
o.title = ("| | |  ├" + title);
if (pid==4)
o.title = ("| | |  ├" + title);
这里可以使用循环来达到无论多少级都可以正确挂上去,不好意思,时间有限,循环没调了
ZHANG9652 2003-11-26
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<SCRIPT language="javascript">
var s = "1,≡ 电 脑 技 术 ≡,-1|2,『 技术论坛 』,1|3,≡ 休 闲 娱 乐 ≡,-1|4,『 Net专区 』,2|6,『 网站安全 』,1|7,ASP.NET,4|8,C#,4";

function node(id, title, pid)
{
this.id = id;
this.title = title;
this.pid = pid;
this.children = new Array();
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,"");}

var nodelist = new Array();

function window.onload()
{
var a = s.split(/\|/);
var nmin = null;

for (var i = 0 ; i < a.length; i++)
{
var a2 = a[i].split(/,/);
var id = parseInt(a2[0].trim());
var title = a2[1];
var pid = parseInt(a2[2].trim());

var o = nodelist[id];

if (o == null)
{
o = new node(id,title,pid);
nodelist[id] = o;
}

o.id = id;
//var s = "1,≡ 电 脑 技 术 ≡,-1|2,『 技术论坛 』,1|3,≡ 休 闲 娱 乐 ≡,-1|4,『 Net专区 』,2|6,『 网站安全 』,1|7,ASP.NET,4|8,C#,4";

if (pid == -1)
o.title = ("╋" + title);
else
{
var sTmp="";
var i;

if (pid==1)
o.title = ("| ├" + title);
if (pid==2)
o.title = ("| |  ├" + title);
if (pid==3)
o.title = ("| | |  ├" + title);
if (pid==4)
o.title = ("| | |  ├" + title);




}

// o.title = (pid==-1?"╋"+title:"| "+title);
o.pid = pid;


if (nodelist[pid] == null)
{
nodelist[pid] = new node(pid);
}

nodelist[pid].children.push(o);

if (nmin == null || nmin > pid)
nmin = pid;

}
dvHtml.innerHTML = "<select name=boardid size=1>"+display(nmin, 0)+"</select>";
}

function display(pid,nlevel)
{
var s = "";
for (var i=0; i < nlevel; i++)
s += (i==0?"":"│  ");

var o = nodelist[pid];
if (o.title != null)
s += ('\<option value='+o.id+'\>'+ o.title +'\<\/option\>');

for (var i=0; i < o.children.length; i++)
s += display(o.children[i].id, nlevel + 1);

return s;
}

</SCRIPT>
<META content="MSHTML 6.00.2600.0" name="GENERATOR">
</HEAD>
<BODY>
<DIV id="dvHtml"></DIV>
</BODY>
</HTML>
triout 2003-11-26
  • 打赏
  • 举报
回复
出现你说的结果是你的IE版本的问题,如果你不把 替换为空格的化。
在IE6中(我的环境),会显示多个 。

现在给你的代码在IE下测试通过。
triout 2003-11-26
  • 打赏
  • 举报
回复
<select id=selMenu></select>
<script language="javascript">
var s = "1,≡ 电 脑 技 术 ≡,-1|2,『 技术论坛 』,1|3,≡ 休 闲 娱 乐 ≡,-1|4,『 Net专区 』,2|6,『 网站安全 』,1|7,ASP.NET,4|8,C#,4";

function node(id, title, pid)
{
this.id = id;
this.title = title;
this.pid = pid;
this.children = new Array();
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,"");}
var nodelist = new Array();

function window.onload()
{
var a = s.split(/\|/);
var nmin = null;
for (var i = 0 ; i < a.length; i++)
{
var a2 = a[i].split(/,/);
var id = parseInt(a2[0].trim());
var title = a2[1];
var pid = parseInt(a2[2].trim());

var o = nodelist[id];

if (o == null)
{
o = new node(id,title,pid);
nodelist[id] = o;
}

o.id = id;
o.title = (pid==-1?"╋"+title:"├"+title);
o.pid = pid;


if (nodelist[pid] == null)
{
nodelist[pid] = new node(pid);
}

nodelist[pid].children.push(o);

if (nmin == null || nmin > pid)
nmin = pid;

}

display(nmin, 0);
}

function display(pid,nlevel)
{
var s = "";
for (var i=0; i < nlevel; i++)
s += (i==0?"":"│ ");

var o = nodelist[pid];
if (o.title != null)
{
s += o.title ;
var op=document.createElement("OPTION");
op.text=s;
op.value=o.id;
selMenu.add(op);
}

for (var i=0; i < o.children.length; i++)
display(o.children[i].id, nlevel + 1);

}

</script>
houjianxun 2003-11-26
  • 打赏
  • 举报
回复
感谢 longshenwang 的参与

//---------------------------
我的第二个问题就是想把他放入下拉列表框里面,按我要的格式排列

就是这个格式
╋≡ 电 脑 技 术 ≡
│ ├『 技术论坛 』
│ │ ├『 Net专区 』
│ │ │ ├ASP.NET
│ │ │ ├C#
│ ├『 网站安全 』
╋≡ 休 闲 娱 乐 ≡

可是我放入下拉列表中却是这个样子
╋≡ 电 脑 技 术 ≡
├『 技术论坛 』
├『 Net专区 』
├ASP.NET
├C#
├『 网站安全 』
╋≡ 休 闲 娱 乐 ≡


87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧