没细看你的代码,不过就数据组织形式(mySelect[0][3][1][3][0] = Array('选项3.1', '3.1', '');)上来看,就不是无限级的,这种组织形式很不利于循环生成。

解决方案 »

  1.   

    可以看看我写的那棵树的数据组织:CSDN左边的导航树也是
      

  2.   

    我才简单看了下你的那棵树,以前也看到过,但没认真看,待会再仔细拜读。
    你的那棵树是用指定父节点和节点ID的形式组织数据。
    其实我这里还有一个问题没解决,既SELECT包含两层数据:SELECT[name],OPTION[value],这个和树稍有所不同。
    能帮忙指点下,这样的数据组织为什么不能
      

  3.   

    新做了修改和完善,“漂亮多了”,请继续指点。
    请问:如何在指定某一节点后紧贴着入对象,如:
    <span id="T"></span><span id="T1"></span>
    T.parentNode.insertBefore( obj );,会变到T1后。
      

  4.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> Select </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT=""></HEAD><BODY><SELECT name="Name">
    <option value="2">已经</option>
    </SELECT>
    <SELECT name="Name2">
    <option value="2">已经</option>
    </SELECT>
    <span id="SL">
    </span><script type="text/javascript" language="JavaScript 1.2">
    /*
     * 联动列表类
     */
    function mSelect(name, Options, id, action){
    this.name = name; // 列表对象名称
    this.id = id; // 列表位置 this.Options = new Array(); //列表选项,多维数组 this.index = -1; // 对象关联层次,设置为-1,为使得第一个选项为0
    this.Links = new Array(); // 选项关联对象 this.Created = false; // 列表创建标志:默认--未创建;1--原来不存在,新建立;2--原来存在,增加选项的
    this.Select = null; // 列表对象
    this.parent = null; // 父列表对象
    this.child = null; // 子列表对象 this.action = action; // 处理列表对象选项
    if ( Options )
    this.addOptionsArray( Options );
    }// 增加选项数据
    mSelect.prototype.addOption = function(text, value, selected){
    // text 选项文本
    // value 选项值
    // selected 选项选中状态
    if ( !text ) return;
    // 变量判断:存在,为空,为0,为false
    value = ( value ) ? value : text;
    selected = ( selected ) ? true : false;
    this.index += 1; // 关联索引
    this.Options[this.index] = Array(text, value, selected);
    }
    // 以数组方式批量载入列表选项
    mSelect.prototype.addOptionsArray = function( arrOptions ){
    if ( typeof(arrOptions)=="string" )
    arrOptions = new Array(arrOptions);
    for ( var i=0; i<arrOptions.length; i++ ){
    var aOption = arrOptions[i];
    if ( typeof(aOption)=="string" )
    aOption = new Array(aOption);
    var aText = aOption[0]; // 选项文本
    var aValue = aOption[1]; // 选项值
    var aSelected = aOption[2]; // 选项选中状态
    // 增加选项数据
    this.addOption( aText, aValue, aSelected );
    // 下一级列表数组
    var rOption = aOption[3];
    if ( rOption ){
    // name
    var _Select = new mSelect(  );
    _Select.addOptionsArray( rOption );
    // 关联子列表对象
    this.Link( _Select );
    }
    }
    }
    // 关联选项到子列表对象
    mSelect.prototype.Link = function( oS ){
    if ( !oS ) return;
    this.Links[this.index] = oS;
    }
      

  5.   

    要无限就用递归
    function Tree(){
    this.SubTrees=new Array();
    this.addChild=function(ob){ this.SubTrees[this.SubTrees.length]=ob;
    //...
    }
    //..
    }