Dom对象操作XML兼容令人恶心的FIREFOX

这几天一直在写AJAX请求服务器返回XML更新到界面上,开始的时候已经作完了,后来上面让兼容FIREFOX浏览器,当用FIREFOX打开的时候晕了,一点效果也没有,在网上找了一下资料,但是对于FIREFOX的支持少之又少,没办法只有自己摸索着去作,今天终于该完了,和大家分享:
AJAX请求服务器的函数封装我在前面已经写过这里就直接用了如果不清楚请浏览这里
假设这是通过AJAX返回的一段XML

None.gif <? xml version=\"1.0\" encoding=\"utf-8\"  ?>
None.gif
< blogshow >
None.gif
< title > 我的博客 </ title >
None.gif
< tag >
None.gif
< item  name ="波哥"  age ="25" ></ item >
None.gif
< item  name ="一周七天"  age ="1" ></ item >
None.gif
</ tad >
None.gif
</ blogshow >


这里我们用这样一个函数来判断浏览器的类型初始化相应的DOM对象

None.gif function  bg_Ajax_GetXmlDoc(xml,index)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
var xmlDoc;
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if(global_IsIE&&window.Ajax_XMLDocumentProgID)dot.gif{
InBlock.gif        xmlDoc 
= new ActiveXObject(window.Ajax_XMLDocumentProgID);
InBlock.gif        
if(xml!=null) xmlDoc.loadXML(xml);
InBlock.gif        
return xmlDoc;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
var xmlDocVersions = new Array("Msxml2.domdocument.5.0""Msxml2.domdocument.4.0""Msxml2.domdocument.3.0""Msxml2.domdocument""Microsoft.domdocument"); 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if (window.ActiveXObject && index < xmlDocVersions.length)dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
trydot.gif
InBlock.gif            xmlDoc 
= new ActiveXObject(xmlDocVersions[index]); 
InBlock.gif            
//Debug("XML Doc Version: "+xmlDocVersions[index]+"<br>"); 
InBlock.gif
            xmlDoc.async="false"
InBlock.gif            xmlDoc.loadXML(xml);
InBlock.gif            window.Ajax_XMLDocumentProgID 
= xmlDocVersions[index];
InBlock.gif            
return xmlDoc;
ExpandedSubBlockStart.gifContractedSubBlock.gif        }
catch(e)dot.gif{
InBlock.gif            
return bg_Ajax_GetXmlDoc(xml, index+1); 
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedSubBlockStart.gifContractedSubBlock.gif    
if (document.implementation.createDocument)dot.gif
InBlock.gif        
var parser = new DOMParser(); 
InBlock.gif        xmlDoc 
= parser.parseFromString(xml, "text/xml"); 
InBlock.gif        
return xmlDoc;
ExpandedSubBlockEnd.gif    }
 
InBlock.gif    
if(xmlDoc == null) alert("XML Doc Load Failed"); 
InBlock.gif    
return xmlDoc; 
ExpandedBlockEnd.gif}
通过这个函数就可以返回相应浏览器的DOM对象 xml是xml数据 index填写0即可
这样我们通过var readXml=bg_Ajax_GetXmlDoc(response,0); 假设response是返回的XML数据;
readxml就是一个DOM了
然后通过下面这个函数返回节点值
None.gif function  bg_Ajax_GetNodesByTagName(node, path)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(global_IsIE)
InBlock.gif        
return node.selectSingleNode(path).text;
InBlock.gif    
else
InBlock.gif        
return node.getElementsByTagName(path)[0].textContent;
ExpandedBlockEnd.gif}
然后通过这样来取得一个节点的值
var title=bg_Ajax_GetNodesByTagName(readXml,global_IsIE ? "//blogshow/title" : "title");
下面看看该如何拿到TAG标记里的每个ITEM信息
这里我们构造这样一个函数
None.gif function  bg_Ajax_getNodes(node,path)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(global_IsIE)
InBlock.gif        
return node.documentElement.selectNodes(path);
InBlock.gif    
else
InBlock.gif        
return node.getElementsByTagName(path);
ExpandedBlockEnd.gif}
这里返回节点组
然后通过
None.gif var  Tag  = bg_Ajax_getNodes(readXml,global_IsIE  ?   " //blogshow/tag/item " : " item " )
None.gif   
var  j = Tag.length;
None.gif        
var  html = "" ;
None.gif        
for ( var  i = 0 ;i < j;i ++ )
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif             line 
=blogshowTag[i];      
InBlock.gif            html
=html+"<span class=\"linktwo\" style=\"font-size:12px\"><a href=\"tu.aspx?id="+line.getAttribute("name")+"\"><nowrap>"+line.getAttribute("age")+"</nowrap></a></span>&nbsp;&nbsp;&nbsp;&nbsp;";
ExpandedBlockEnd.gif                   }

None.gif        
None.gif        document.getElementById(
" tag " ).innerHTML = html;

这样就返回了item的信息
在上面global_IsIE是在页面中声明的全局变量
None.gif < script language = " javascript " >
None.gif        
var  global_IsIE  =   false ;
ExpandedBlockStart.gifContractedBlock.gif        
if  (window.ActiveXObject) dot.gif
InBlock.gif            global_IsIE 
= true
ExpandedBlockEnd.gif        }
 
None.gif    
</ script >

这样也就结束了,可以支持FIREFOX 在IE下更是没问题的
欢迎大家批评指正

转载于:https://www.cnblogs.com/lucangel/archive/2006/08/01/464907.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值