firefox并不支持selectSingleNode和selectNodes的解决方法

转自:http://qsrock.iteye.com/blog/209585

 

function test(){
		var perid = document.thisForm.PerID.value;
		
		var xml="test";
		 if(window.ActiveXObject){   
	        var xml=new ActiveXObject("Microsoft.XMLDOM");
			xml.async=false;
			xml.load("xxxx.xml");
			
	        
	    }else if((typeof document.implementation != 'undefined')&&
	    	(typeof document.implementation.createDocument!='undefined')){   
	        xml = document.implementation.createDocument("", "", null);

			xml.async=false;
			xml.load("xxxx.xml");

			
			//firefox并不支持selectSingleNode和selectNodes方法;下面两段是用XPath来解决firefox模拟selectSingleNode和selectNodes方法,正确性有待解决
			XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (xpath){
		         var  x = this .selectNodes(xpath)
		         if ( ! x || x.length < 1 ) return   null ;
		         return  x[ 0 ];
		    }
			XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (xpath){
		         var  xpe  =   new  XPathEvaluator();
		         var  nsResolver  =  xpe.createNSResolver( this .ownerDocument  ==   null   ?
		             this .documentElement :  this .ownerDocument.documentElement);
		         var  result  =  xpe.evaluate(xpath,  this , nsResolver,  0 ,  null );
		         var  found  =  [];
		         var  res;
		         while  (res  =  result.iterateNext())
		            found.push(res);
		         return  found;
		    }
			
			
	    }  
		//下面就可以用selectSingleNode和selectNodes方法
		var row=null;
	
		if(perid.substring(0,5)=="NO" && perid.length==9){
			row=xml.selectSingleNode("root/row[@ID='"+perid+"']");
			if (row!=null){
				document.thisForm.MenuColor.value=row.getAttribute("CssFileName");
				ChangeBgColor(document.thisForm.MenuColor.value);
			}
		}
	   
	}

  

原文地址:https://www.cnblogs.com/xuqp/p/9446925.html