LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

js脚本:ie和firefox的兼容

admin
2013年7月5日 8:12 本文热度 4774
1、Select列表控件

删除列表项。在IE下工作正常的代码:


obj.options.remove(i);

需要修改为:



obj.remove(i);

添加列表项。在IE下工作正常的代码:



var oOption = document.createElement('option');
oOption.text = text;
oOption.value = value;
targetArea.options.add(oOption);

为了提供更好的浏览器兼容性,更符合W3C DOM Level 2 HTML标准,建议改为如下代码:



var oOption = document.createElement('option');
oOption.text = text;
oOption.value = value;
targetArea.options[targetArea.options.length]=new Option(text,value);

另外,selectObj.options(i),需要改为selectObj.options[i]。

2、XmlDom对象

IE下一般这样做:



var xmlDom = new ActiveXObject("Microsoft.XMLDOM");

为了兼容Firefox,需要修改为:



if (window.ActiveXObject){
var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
}
else{
if (document.implementation && document.implementation.createDocument){
var xmlDom = document.implementation.createDocument("","",null);
}
}

3、对于childNodes的循环处理



var nodes=xmlDom.documentElement;
var sName; //标签文本
var sValue; //标签值

if (nodes.childNodes.length != 0) {
for (var i=0;ioItem = nodes.childNodes.item(i);
sName = oItem.text;
sValue = oItem.getAttribute("id"); // 这里会报错
addOption(targetArea,sName,sValue);
}
}

上面这段代码,在IE下完全没有问题,但是在Firefox下就毫无反应,Firefox下的错误控制台报告:oItem没有 getAttribute方法,百思不得其解,经调试,发现oItem的节点类型竟然是3,也就是文本,进一步调试得知,oItem的节点类型分别是3、 1、3、1....(1是节点对象),使用Firefox的Dom查看器一看,恍然大悟!其中,Xml数据字符串为:

验房服务
家装设计
建筑工程
家装监理
检测(环境质量)
风水

在Dom查看器中看到:

可以看到,#text节点和节点对象交替排列(id列有数据的为正常节点,例如“验房服务”、“家装设计”等等),造成当oItem为#text类型的时候调用getAttribute()方法失败,因为文本节点没有此方法。

那么,修改后的代码是:

var nodes=xmlDom.documentElement;
var sName; //标签文本
var sValue; //标签值
var oItem,sName,sValue,oOption;
if (nodes.childNodes.length != 0) {
for (var i=0;ivar oItem = nodes.childNodes[i];
if(oItem.nodeType == 1){ //判断是否是Element类型
sName = oItem.childNodes[0].nodeValue; //这里需要注意下
sValue = oItem.getAttribute("id");
var oOption = document.createElement('option');
oOption.text = sName;
oOption.value = sValue;
objType.options.add(oOption);
}
}
}

还有一点需要注意的是oItem.text无法在Firefox中取得节点的值,取而代之的是:

oItem.childNodes[0].nodeValue;

至此,真相大白!

附录1:帮助我解决问题的两篇关键文章:

1、http://www.sitepoint.com/forums/showthread.php?t=307056&goto=nextnewest

2、http://www.thescripts.com/forum/thread471907.html


该文章在 2013/7/5 8:13:58 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved