JavascriptはFirefoxでXMLノードを読み込む方法をサポートします
10887 ワード
出典:http://blog.csdn.net/gaoyunpeng/article/details/2063351
最近、プロジェクトのAjax機能を使ったページを修正すると、多くの書き方がFirefoxの下で問題があることがわかりました.主に当時開発時にIEの下でテストに合格しただけで提出されたためです.Firefoxの書き方はIEと大きく異なり、主な大きな問題はXMLノードやサブノードの内容を読み取る際にIEの下でselectNodes、selectSingleNodeといった方法が一般的に使われていることです.Firefoxはこれらの方法がなくて、だから使うことができなくて、先日長い間探してやっと、ずっと1つのとても良い解決方法を見つけていないで、多くのウェブサイトが提供したのは根本的に支持しないで、あるいは使用方法で、不便で実用的ではありませんて、今日私はついに1つのとても良い解決方法を見つけて、私はそれを1つのJSファイルにして、それを引用すればIEのように使えます.コードは次のとおりです.
以上のコードを1つのJSファイルとして保存し、ページ上でそれを引用すれば、XMLノードの読み取り操作がIEのように使用できるようになり、テストに合格した.
最近、プロジェクトのAjax機能を使ったページを修正すると、多くの書き方がFirefoxの下で問題があることがわかりました.主に当時開発時にIEの下でテストに合格しただけで提出されたためです.Firefoxの書き方はIEと大きく異なり、主な大きな問題はXMLノードやサブノードの内容を読み取る際にIEの下でselectNodes、selectSingleNodeといった方法が一般的に使われていることです.Firefoxはこれらの方法がなくて、だから使うことができなくて、先日長い間探してやっと、ずっと1つのとても良い解決方法を見つけていないで、多くのウェブサイトが提供したのは根本的に支持しないで、あるいは使用方法で、不便で実用的ではありませんて、今日私はついに1つのとても良い解決方法を見つけて、私はそれを1つのJSファイルにして、それを引用すればIEのように使えます.コードは次のとおりです.
- var GetNodeValue = function(obj)
- {
- var str = "";
- if(window.ActiveXObject) //IE
- {
- str = obj.text;
- }
- else //Mozilla
- {
- try
- {
- str = obj.childNodes[0].nodeValue;
- }
- catch(ex)
- {
- str = "";
- }
- }
- return str;
- }
-
- if(document.implementation && document.implementation.createDocument)
- {
- 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);
- };
-
- // check for XPath implementation
- if( document.implementation.hasFeature("XPath", "3.0") )
- {
- // prototying the XMLDocument
- 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 = [];
- for( var i = 0; i < aItems.snapshotLength; i++)
- {
- aResult[i] = aItems.snapshotItem(i);
- }
- return aResult;
- }
-
- // prototying the Element
- Element.prototype.selectNodes = function(cXPathString)
- {
- if(this.ownerDocument.selectNodes)
- {
- return this.ownerDocument.selectNodes(cXPathString, this);
- }
- else{throw "For XML Elements Only";}
- }
- }
-
- // check for XPath implementation
- if( document.implementation.hasFeature("XPath", "3.0") )
- {
- // prototying the XMLDocument
- XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
- {
- if( !xNode ) { xNode = this; }
- var xItems = this.selectNodes(cXPathString, xNode);
- if( xItems.length > 0 )
- {
- return xItems[0];
- }
- else
- {
- return null;
- }
- }
-
- // prototying the Element
- Element.prototype.selectSingleNode = function(cXPathString)
- {
- if(this.ownerDocument.selectSingleNode)
- {
- return this.ownerDocument.selectSingleNode(cXPathString, this);
- }
- else{throw "For XML Elements Only";}
- }
- }
- }
-
以上のコードを1つのJSファイルとして保存し、ページ上でそれを引用すれば、XMLノードの読み取り操作がIEのように使用できるようになり、テストに合格した.