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 += "&nbsp;";  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>

解决方案 »

  1.   

    感谢 saucer 的回答我的问题解决了,早上测试了很多次,如果再有问题还会请教你:)结贴!
      

  2.   

    又发现点问题,还要再请教一下//-------------------------------------
    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?"":"│&nbsp;&nbsp;");  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>
      

  3.   

    感谢 longshenwang 的参与//---------------------------
    我的第二个问题就是想把他放入下拉列表框里面,按我要的格式排列就是这个格式
    ╋≡ 电 脑 技 术 ≡
    │  ├『 技术论坛 』
    │  │  ├『 Net专区 』
    │  │  │  ├ASP.NET
    │  │  │  ├C#
    │  ├『 网站安全 』
    ╋≡ 休 闲 娱 乐 ≡可是我放入下拉列表中却是这个样子
    ╋≡ 电 脑 技 术 ≡
    ├『 技术论坛 』
    ├『 Net专区 』
    ├ASP.NET
    ├C#
    ├『 网站安全 』
    ╋≡ 休 闲 娱 乐 ≡
      

  4.   

    <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>
      

  5.   

    出现你说的结果是你的IE版本的问题,如果你不把&nbsp;替换为空格的化。
    在IE6中(我的环境),会显示多个&nbsp;。现在给你的代码在IE下测试通过。
      

  6.   

    <!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 = ("|&nbsp;├" + title);
    if (pid==2)
    o.title = ("|&nbsp;|&nbsp;&nbsp;├" + title);
    if (pid==3)
    o.title = ("|&nbsp;|&nbsp;|&nbsp;&nbsp;├" + title);
    if (pid==4)
    o.title = ("|&nbsp;|&nbsp;|&nbsp;&nbsp;├" + 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?"":"│&nbsp;&nbsp;");  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>
      

  7.   

    开始有个死循环,调试了半天,if (pid==1)
    o.title = ("|&nbsp;├" + title);
    if (pid==2)
    o.title = ("|&nbsp;|&nbsp;&nbsp;├" + title);
    if (pid==3)
    o.title = ("|&nbsp;|&nbsp;|&nbsp;&nbsp;├" + title);
    if (pid==4)
    o.title = ("|&nbsp;|&nbsp;|&nbsp;&nbsp;├" + title);
    这里可以使用循环来达到无论多少级都可以正确挂上去,不好意思,时间有限,循环没调了
      

  8.   

    感谢  ZHANG9652 和 triout 的解答问题全部解决,最后采用triout的答案,主要功劳还是 saucer 的:)