怎样使用Javascript操作XMLDOM才能兼容IE、FireFox浏览器呢?

最近作了一个项目用到了AJAX技术,总算是赶了一回时髦不至于让自己太落伍。项目虽然已经完成,不过过程确并不十分顺利。遇到最大的问题就是如何兼容Firefox浏览器使Javascript能正确操作XMLDOM,经过若干次失败,总算把遇到的问题一一解决。这里总结了几个常用的Javascript方法:

1.  创建XMLDOM对象

var domDoc = false;
domDoc 
= document.implementation.createDocument("text/xml"""null);


2.  加载XML DOCUMENT
XMLDocument.prototype.LoadXML = function(xmlString)
{
    var childNodes = this.childNodes;
    
for (var i = childNodes.length - 1; i >= 0; i--)
       
this.removeChild(childNodes[i]);

    
var dp = new DOMParser();
    
var newDOM = dp.parseFromString(xmlString, "text/xml");
    
var newElt = this.importNode(newDOM.documentElement, true);
    
this.appendChild(newElt);
}


3.  选择匹配XPath表达式的节点集合
Element.prototype.selectNodes = function(cXPathString)
{
    if(this.ownerDocument.selectNodes)
    {
       
return this.ownerDocument.selectNodes(cXPathString, this);
    }
    
else
    {
       
throw "For XML Elements Only";
    }
}
XMLDocument.prototype.SelectNodes = function(cXPathString, xNode)
{
    if!xNode )
        { xNode 
= this; } 
    
var oNSResolver = this.createNSResolver(this.documentElement)
    
var aItems = this.evaluate(cXPathString, xNode, oNSResolver, 
    XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 
null)
    
var aResult = [];
    
forvar i = 0; i < aItems.snapshotLength; i++)
    {
        aResult[i] 
=  aItems.snapshotItem(i);
    }
    
return aResult;
}


4.  获得节点的值

function GetNodeValue(objXmlElement)
{
    var str = "";
    if(window.XMLHttpRequest)        //Mozilla
    {
        try
        {
            str 
= obj.firstChild.nodeValue;
        }
       
catch(ex)
        {
            str 
= "";
        }
    }
   
else if(window.ActiveXObject)    //IE
    {
        str 
= obj.text;
    }
   
return str;
}


 由于水平有限,这里仅列举了几个常用的函数,争取以后能不断完善。如果您有不同意见,请指正!在下不胜感激~~~
posted on 2006-07-14 17:20  Dicman  阅读(4101)  评论(4编辑  收藏  举报