javascript实现的树型下拉框改进版

来源:互联网 发布:php 无法执行exec命令 编辑:程序博客网 时间:2024/05/24 15:36
    发现上一个版本,如果数据顺序颠倒就会出现问题,现在加以改进,原理是先顺序加载根节点,在加载每个根节点后,再遍历每个数组,看有没有以这个根节点为父节点的数组,如果有,就加载到下拉框,然后再递归看有没有以这个节点为父结点的数组,如果有,再加载到下拉框,以此类推...
代码如下:
  1.  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  <html xmlns="http://www.w3.org/1999/xhtml">
  3.   <head>
  4.    <title> javascript树型菜单 author:sclsch@188.com</title>
  5.    <meta name="generator" content="editplus" />
  6.    <meta name="author" content="" />
  7.    <meta name="keywords" content="" />
  8.    <meta name="description" content="" />
  9.    <script type="text/javascript">
  10.      var data =new Array();
  11.     
  12.      data[0]= {id:'0',pid:'1',text:'河北'};
  13.      data[1]= {id:'1',pid:'-1',text:'中国'};
  14.      data[2]= {id:'2',pid:'6',text:'莫斯科'};
  15.      data[3]= {id:'3',pid:'0',text:'邯郸'};
  16.      data[4]= {id:'4',pid:'0',text:'石家庄'};
  17.      data[5]= {id:'5',pid:'3',text:'邯郸县'};
  18.      data[6]= {id:'6',pid:'-1',text:'俄罗斯'};
  19.      data[7]= {id:'7',pid:'5',text:'孙程亮 sclsch@188.com'};
  20.     function TreeSelector(item,data,rootId){
  21.        this._data = data;
  22.        this._item = item;
  23.        this._rootId = rootId;
  24.     }
  25.     TreeSelector.prototype.createTree = function(){
  26.         var  len =this._data.length;
  27.         for( var i0;i<len;i++){
  28.           if ( this._data[i].pid == this._rootId){
  29.              this._item.options.add(new Option(".."+this._data[i].text,this._data[i].id));
  30.                  for(var j=0;j<len;j++){
  31.                    this.createSubOption(len,this._data[i],this._data[j]);
  32.                  
  33.                  }  
  34.           }
  35.        }
  36.     }
  37.      
  38.     TreeSelector.prototype.createSubOption = function(len,current,next){
  39.            var blank = "..";
  40.            if ( next.pid == current.id){
  41.                 intLevel =0;
  42.                 var intlvl =this.getLevel(this._data,this._rootId,current);
  43.                 for(a=0;a<intlvl;a++)
  44.                    blank += "..";
  45.                 blank += "├-";
  46.                 this._item.options.add(new Option(blank + next.text,next.id));
  47.                  
  48.                 for(var j=0;j<len;j++){
  49.                   this.createSubOption(len,next,this._data[j]);
  50.                 
  51.                 }   
  52.                 
  53.            }
  54.     }
  55.     TreeSelector.prototype.getLevel = function(datasources,topId,currentitem){
  56.         
  57.         var pid =currentitem.pid;
  58.         if( pid !=topId)
  59.         {
  60.           for(var i =0 ;i<datasources.length;i++)
  61.           {
  62.              if( datasources[i].id == pid)
  63.              {
  64.                 intLevel ++;
  65.                 this.getLevel(datasources,topId,datasources[i]);
  66.              }
  67.           }  
  68.         }
  69.         return intLevel;
  70.    }
  71.    </script>
  72.   </head>
  73.   <body>
  74.    <select id="myselect">
  75.  </select>
  76.  <script language=javascript type="text/javascript">
  77.    var ts = new TreeSelector(document.getElementById("myselect"),data,-1);
  78.    ts.createTree();
  79.  </script>
  80.   </body>
  81.  </html>


原创粉丝点击