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

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

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


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

function bg_Ajax_GetXmlDoc(xml,index)
{
    
var xmlDoc;
    
if(global_IsIE&&window.Ajax_XMLDocumentProgID){
        xmlDoc 
= new ActiveXObject(window.Ajax_XMLDocumentProgID);
        
if(xml!=null) xmlDoc.loadXML(xml);
        
return xmlDoc;
    }

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

    }

    
if (document.implementation.createDocument)
        
var parser = new DOMParser(); 
        xmlDoc 
= parser.parseFromString(xml, "text/xml"); 
        
return xmlDoc;
    }
 
    
if(xmlDoc == null) alert("XML Doc Load Failed"); 
    
return xmlDoc; 
}
通过这个函数就可以返回相应浏览器的DOM对象 xml是xml数据 index填写0即可
这样我们通过var readXml=bg_Ajax_GetXmlDoc(response,0); 假设response是返回的XML数据;
readxml就是一个DOM了
然后通过下面这个函数返回节点值
function bg_Ajax_GetNodesByTagName(node, path)
{
    
if(global_IsIE)
        
return node.selectSingleNode(path).text;
    
else
        
return node.getElementsByTagName(path)[0].textContent;
}
然后通过这样来取得一个节点的值
var title=bg_Ajax_GetNodesByTagName(readXml,global_IsIE ? "//blogshow/title" : "title");
下面看看该如何拿到TAG标记里的每个ITEM信息
这里我们构造这样一个函数
function bg_Ajax_getNodes(node,path)
{
    
if(global_IsIE)
        
return node.documentElement.selectNodes(path);
    
else
        
return node.getElementsByTagName(path);
}
这里返回节点组
然后通过
var Tag =bg_Ajax_getNodes(readXml,global_IsIE ? "//blogshow/tag/item":"item")
   
var j=Tag.length;
        
var html="";
        
for(var i=0;i<j;i++)
        
{
             line 
=blogshowTag[i];      
            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;";
                   }

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

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

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

posted on 2006-08-01 12:57  Work Log  阅读(1506)  评论(0编辑  收藏  举报