解决方案 »

  1.   

    补上JS整体代码,求大神指点一下修改,谢谢function ClassOption(aa,ff,mm) //mm为模式 0非强制 1=强制
    {
    this.obj = aa;
    if(window.ActiveXObject) //浏览器兼容处理
    { this.dom = new ActiveXObject("Microsoft.XMLDOM");}
    else
    { this.dom = document.implementation.createDocument("","",null);}
    this.dom.async  = false;
    this.dom.load(ff);
    this.root  = this.dom.documentElement;  //根节点
    this.value = 0; //数据默认值
    this.mode = mm;
    }
    ClassOption.prototype.load = function(fid)
    {
    this.format(this.root);
    this.dataObj  = document.getElementById(fid); //数据对象
    if (isNaN(this.dataObj.value)){ this.value=0; }
    this.value=parseInt(this.dataObj.value);
    this.select  = new Array(); //select对象
    this.selected = new Array(); //select对象选择序号
    this.nodeed  = null; //正在选择的节点
    if (this.value!=0) //有默认值
    {
    this.nodes=this.dom.getElementsByTagName("class");
    for (i=0; i<this.nodes.length; i++) //取的末尾节点
    {
    if (this.nodes[i].getAttribute("id")==this.value)
    {
    this.nodeed = this.nodes[i];
    break;
    }
    }
    if (this.nodeed!=null)
    {
    //循环取得所有关系节点 再倒序生成所有选择序号
    var n=0;
    var eds= new Array();
    while (this.nodeed!=this.root)
    {
    this.format(this.nodeed.parentNode.childNodes);
    //取的序列号
    for (j=0;j<this.nodeed.parentNode.childNodes.length;j++)
    {
    if (this.nodeed.parentNode.childNodes[j]==this.nodeed)
    {
    eds[n] = j; //为倒序
    n++;
    this.nodeed = this.nodeed.parentNode;
    break;
    }
    }
    }
    for (i=0; i<eds.length; i++) //倒序转正
    {
    this.selected[i]=eds[eds.length-1-i];
    }
    }
    }
    this.nodes = this.root.childNodes;
    var k=0;
    while (this.nodes.length!=0) //生成所有SELECT
    {
    var ind=0;
    var t = eval(this.obj);
    this.select[k] = document.createElement("select");
    this.select[k].onchange = function(){ t.change(this); }
    this.dataObj.parentNode.appendChild(this.select[k]);
    if (this.mode==0)//非强制模式
    {
    this.select[k].options[0] = new Option("------","0");
    this.select[k].options[0].selected = true;
    ind=1;
    }
    for (i=0; i<this.nodes.length; i++)
    {
    this.select[k].options[ind] = new Option(this.nodes[i].getAttribute("name"),this.nodes[i].getAttribute("id"));
    if (k<this.selected.length)
    {
    if (i==this.selected[k])
    {
    this.select[k].options[ind].selected = true;
    this.dataObj.value = this.nodes[i].getAttribute("id");
    }
    }
    ind++;
    }
    if (this.selected[k]==null)
    {
    if (this.mode==1&&this.nodes.length>0)
    {
    this.selected[k]=0;
    this.dataObj.value = this.nodes[0].getAttribute("id");
    this.nodes = this.nodes[0].childNodes;
    }
    else
    {
    this.nodes = "";
    }
    }
    else
    {
    this.nodes = this.nodes[this.selected[k]].childNodes;
    }
    k++;
    }
    }
    ClassOption.prototype.format = function(nodeObj)
    {
    var f_node=nodeObj;
    //兼容 FF/NS FF/NS认为换行为文本空节点
    if (!window.ActiveXObject)
    {
    for (i=f_node.length-1; i>=0; i--)
    {
    if (f_node[i].nodeType == 3)
    {
    f_node[i].parentNode.removeChild(f_node[i]);
    }
    }
    }
    nodeObj=f_node;
    // return f_node;
    }
    ClassOption.prototype.change = function(sobj)
    {
    var k=0;
    var s=false;
    this.nodes = this.root.childNodes;
    for (i=0; i<this.select.length; i++) //确定对象序号 并且生成数据路径
    {
    this.selected[i]=this.select[i].selectedIndex;
    if (this.mode==0)
    {
    if (this.selected[i]!=0)
    {
    this.dataObj.value = this.select[i].options[this.selected[i]].value;
    this.selected[i]--;
    }
    else
    {
    this.selected[i]=null;
    if (i==0) this.dataObj.value = 0; //无上级继承值为0
    }
    }
    if (this.mode==1)
    {
    this.dataObj.value = this.select[i].options[this.selected[i]].value;
    }
    this.format(this.nodes);
    if (this.selected[i]!=null)
    {
    this.nodes = this.nodes[this.selected[i]].childNodes;
    }
    if (this.select[i]==sobj) 

    k=i; 
    break; 
    }
    }
    for (i=this.select.length-1; i>k; i--) //删除后面下拉select,修改数组 this.select和this.selected的长度
    {
    this.select[i].parentNode.removeChild(this.select[i]);
    this.select.length --;
    this.selected.length --;
    }
    if (this.nodes != this.root.childNodes)
    {
    //生成下拉
    while (this.nodes.length!=0&&this.selected[k]!=null)
    {
    k++;
    var t = eval(this.obj);
    var ind=0;
    this.select[k]=document.createElement("select");
    this.select[k].onchange = function(){ t.change(this); }
    this.dataObj.parentNode.appendChild(this.select[k]);
    if (this.mode==0)
    {
    this.select[k].options[0]=new Option("------",0);
    ind=1;
    }
    this.format(this.nodes);
    for (i=0; i<this.nodes.length; i++)
    {
    this.select[k].options[ind]=new Option(this.nodes[i].getAttribute("name"),this.nodes[i].getAttribute("id"));
    ind++;
    }
    if (this.mode==1)
    {
    if (this.nodes.length>0)
    {
    this.selected[k]=0;
    this.dataObj.value = this.nodes[0].getAttribute("id");
    this.nodes=this.nodes[0].childNodes;
    }
    }
    }
    }
    }
      

  2.   

    ActiveXObject 这个只能在ie上用
      

  3.   


    IE高版本也不显示啊,在IE兼容模式下浏览才可以显示出来,360的也是,只能在IE兼容模式下浏览
      

  4.   

    IE11之后的判断方法变了
    参考
    http://msdn.microsoft.com/en-us/library/ie/dn423948%28v=vs.85%29.aspx