window.ActiveXObject兼容问题 ActiveXObject 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 补上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; } } } }} ActiveXObject 这个只能在ie上用 IE高版本也不显示啊,在IE兼容模式下浏览才可以显示出来,360的也是,只能在IE兼容模式下浏览 IE11之后的判断方法变了参考http://msdn.microsoft.com/en-us/library/ie/dn423948%28v=vs.85%29.aspx JS如何屏蔽按住键不放? 简单的正则问题 关于自动提示文本框的问题哦 如下功能的导航栏怎么写?或者给点思路! 关于Extjs柱形图,无法渲染 在线等!求帮看这段代码! 新手求教:客户端验证问题! 谢谢! 怎么判断E-mail里是否有@???急!!!!谢谢!!!! 关于innerHTML的询问! js fetch promise对象 想返回成json对象 但是返回的是promise对象 javascript实现浏览到某一行文字时,文字从左滚动到中心 javascript值传递和引用传递的问题
{
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;
}
}
}
}
}
IE高版本也不显示啊,在IE兼容模式下浏览才可以显示出来,360的也是,只能在IE兼容模式下浏览
参考
http://msdn.microsoft.com/en-us/library/ie/dn423948%28v=vs.85%29.aspx