JavascriptはFirefoxでXMLノードを読み込む方法をサポートします


出典:http://blog.csdn.net/gaoyunpeng/article/details/2063351
最近、プロジェクトのAjax機能を使ったページを修正すると、多くの書き方がFirefoxの下で問題があることがわかりました.主に当時開発時にIEの下でテストに合格しただけで提出されたためです.Firefoxの書き方はIEと大きく異なり、主な大きな問題はXMLノードやサブノードの内容を読み取る際にIEの下でselectNodes、selectSingleNodeといった方法が一般的に使われていることです.Firefoxはこれらの方法がなくて、だから使うことができなくて、先日長い間探してやっと、ずっと1つのとても良い解決方法を見つけていないで、多くのウェブサイトが提供したのは根本的に支持しないで、あるいは使用方法で、不便で実用的ではありませんて、今日私はついに1つのとても良い解決方法を見つけて、私はそれを1つの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.  

以上のコードを1つのJSファイルとして保存し、ページ上でそれを引用すれば、XMLノードの読み取り操作がIEのように使用できるようになり、テストに合格した.