Firefox 下兼容IE操纵 XMLDocument 方式

开发中遇到要兼容FF,其中 IE 操纵 XMLDocument 的一些方法及属性 FF 下都没有
后来网上搜索参考在 js 里加入如下代码解决问题

if(!document.all){
	// 为 XMLDocument 添加 loadXML 方法
	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);
 	}
	 // 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";}
    }
    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";}
    }
    // 为 Firefox 下的 Node 添加 text 属性
	Element.prototype.__defineGetter__( "text",  function(){
			return this.textContent;
		}
	); 
}

你可能感兴趣的:(JavaScript,xml,IE,prototype,firefox)