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>
<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>
解决方案 »
- 求js去除或恢复word批注的脚本
- cookie设置path后不稳定
- IE7 nodeValue为空问题
- 大家用js多长时间了?都有什么感受?我觉得这语言很多地方都不好,怎么规范方也不给改进呢!
- 火狐狸支持滤镜(filter)吗?
- textarea插入字符问题
- 在用JS实现实时计算的时候,为什么会出现对话框,提示"栈溢出"?
- 各位大虾 请教用js怎么能扑捉到word的保存事件 谢谢!!
- 请问用getrows 方法得到的数组怎样赋给一个javascript的数组???
- 有关状态栏的问题
- 为什么表单不提交?!在线。。。
- 在使用showModalDialog的时候,怎么把《--Web页对话况》改成自己的内容呢。。
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>
我的第二个问题就是想把他放入下拉列表框里面,按我要的格式排列就是这个格式
╋≡ 电 脑 技 术 ≡
│ ├『 技术论坛 』
│ │ ├『 Net专区 』
│ │ │ ├ASP.NET
│ │ │ ├C#
│ ├『 网站安全 』
╋≡ 休 闲 娱 乐 ≡可是我放入下拉列表中却是这个样子
╋≡ 电 脑 技 术 ≡
├『 技术论坛 』
├『 Net专区 』
├ASP.NET
├C#
├『 网站安全 』
╋≡ 休 闲 娱 乐 ≡
<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>
在IE6中(我的环境),会显示多个 。现在给你的代码在IE下测试通过。
<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>
o.title = ("| ├" + title);
if (pid==2)
o.title = ("| | ├" + title);
if (pid==3)
o.title = ("| | | ├" + title);
if (pid==4)
o.title = ("| | | ├" + title);
这里可以使用循环来达到无论多少级都可以正确挂上去,不好意思,时间有限,循环没调了