Javascript支持在Firefox下讀取XML節點的方法

出處:http://blog.csdn.net/gaoyunpeng/article/details/2063351

最近在修改項目的用到Ajax功能的頁面,發現很多寫法在Firefox下都存在問題,主要是因爲當時開發時只在IE下測試通過就提交了,而Firefox的寫法與IE有很大的區別,主大的問題是當在讀取XML節點或子節點的內容時,IE下一般使用selectNodes selectSingleNode 這 些方法,而Firefox並沒有這些方法,所以不能使用,前幾天找了好久終於,一直沒有找到一個很好的解決方法,很多網站提供的要不就是根本不支持,要不 就是使用方法,不方便不實用,今天我終於找到一個很好的解決方法了,我把它弄成一個JS文件,只要引用它就可以像IE一樣使用了。

代碼如下:
 

  1. var GetNodeValue = function(obj)  
  2. {  
  3.     var str = "";  
  4.     if(window.ActiveXObject)    //IE  
  5.     {  
  6.         str = obj.text;  
  7.     }  
  8.     else //Mozilla  
  9.     {  
  10.         try 
  11.         {  
  12.             str = obj.childNodes[0].nodeValue;  
  13.         }  
  14.         catch(ex)  
  15.         {  
  16.             str = "";  
  17.         }  
  18.     }  
  19.     return str;  
  20. }  
  21.  
  22. if(document.implementation && document.implementation.createDocument)  
  23. {  
  24.     XMLDocument.prototype.loadXML = function(xmlString)  
  25.     {  
  26.         var childNodes = this.childNodes;  
  27.         for (var i = childNodes.length - 1; i >= 0; i--)  
  28.             this.removeChild(childNodes[i]);  
  29.  
  30.         var dp = new DOMParser();  
  31.         var newDOM = dp.parseFromString(xmlString, "text/xml");  
  32.         var newElt = this.importNode(newDOM.documentElement, true);  
  33.         this.appendChild(newElt);  
  34.     };  
  35.  
  36.     // check for XPath implementation  
  37.     if( document.implementation.hasFeature("XPath""3.0") )  
  38.     {  
  39.        // prototying the XMLDocument  
  40.        XMLDocument.prototype.selectNodes = function(cXPathString, xNode)  
  41.        {  
  42.           if( !xNode ) { xNode = this; }   
  43.           var oNSResolver = this.createNSResolver(this.documentElement)  
  44.           var aItems = this.evaluate(cXPathString, xNode, oNSResolver,   
  45.                        XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)  
  46.           var aResult = [];  
  47.           forvar i = 0; i < aItems.snapshotLength; i++)  
  48.           {  
  49.              aResult[i] =  aItems.snapshotItem(i);  
  50.           }  
  51.           return aResult;  
  52.        }  
  53.  
  54.        // prototying the Element  
  55.        Element.prototype.selectNodes = function(cXPathString)  
  56.        {  
  57.           if(this.ownerDocument.selectNodes)  
  58.           {  
  59.              return this.ownerDocument.selectNodes(cXPathString, this);  
  60.           }  
  61.           else{throw "For XML Elements Only";}  
  62.        }  
  63.     }  
  64.  
  65.     // check for XPath implementation  
  66.     if( document.implementation.hasFeature("XPath""3.0") )  
  67.     {  
  68.        // prototying the XMLDocument  
  69.        XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)  
  70.        {  
  71.           if( !xNode ) { xNode = this; }   
  72.           var xItems = this.selectNodes(cXPathString, xNode);  
  73.           if( xItems.length > 0 )  
  74.           {  
  75.              return xItems[0];  
  76.           }  
  77.           else 
  78.           {  
  79.              return null;  
  80.           }  
  81.        }  
  82.          
  83.        // prototying the Element  
  84.        Element.prototype.selectSingleNode = function(cXPathString)  
  85.        {      
  86.           if(this.ownerDocument.selectSingleNode)  
  87.           {  
  88.              return this.ownerDocument.selectSingleNode(cXPathString, this);  
  89.           }  
  90.           else{throw "For XML Elements Only";}  
  91.        }  
  92.     }  
  93. }  
  94.  

只要把以上代碼存成一個JS文件,在頁面上引用它,當XML節點的讀取操作就可以像IE一樣使用了,已經通過測試。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章