想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的FireFox对XML的处理兼容IE的节点处理方法教程,一起来看看吧!超容易上手~
【 tulaoshi.com - Web开发 】
使Firefox对XML的处理兼容IE的节点处理方法。具体代码列出如下。
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)具体代码如下。
! DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
HTML
HEAD
TITLE 使firefox对xml的处理兼容IE的selectSingleNode selectNodes方法 / TITLE
META NAME ="Author" CONTENT ="emu"
META NAME ="KeyWords" CONTENT ="firefox IE selectSingleNode selectNodes"
META NAME ="Description" CONTENT ="使firefox可以支持selectSingleNode selectNodes方法"
SCRIPT LANGUAGE ="javascript"
!--
var isIE = !! document.all;
function parseXML(st){
if (isIE){
var result = new ActiveXObject( " microsoft.XMLDOM " );
result.loadXML(st);
} else {
var parser = new DOMParser();
var result = parser.parseFromString(st, " text/xml " );
}
return result;
}
if ( ! isIE){
var ex;
XMLDocument.prototype.__proto__.__defineGetter__( " xml " , function (){
try {
return new XMLSerializer().serializeToString( this );
} catch (ex){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
return d.innerHTML;
}
});
Element.prototype.__proto__.__defineGetter__( " xml " , function (){
try {
return new XMLSerializer().serializeToString( this );
} catch (ex){
var d = document.createElement( " div " );
d.appendChild( this .cloneNode( true ));
return d.innerHTML;
}
});
XMLDocument.prototype.__proto__.__defineGetter__( " text " , function (){
return this .firstChild.textContent
});
Element.prototype.__proto__.__defineGetter__( " text " , function (){
return this .textContent
});
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;
}
}
var x = parseXML( " people person first-name= " eric " middle-initial= " H " last-name= " jung " address street= " 321 south st " city= " denver " state= " co " country= " usa " / address street= " 123 main st " city= " arlington " state= " ma " country= " usa " / /person person first-name= " jed " last-name= " brown " address street= " 321 north st " city= " atlanta " state= " ga " country= " usa " / address street= " 123 west st " city= " seattle " state= " wa " country= " usa " / address street= " 321 south avenue " city= " denver " state= " co " country= " usa " / /person/people " );
alert( " 搜索所有人的姓氏(last-name) " )
var results = x.selectNodes( " //person/@last-name " );
for ( var i = 0 ; i results.length;i ++ )
alert( " Person # " + i + " has the last name " + results[i].nodeValue);
alert( " 搜索第二个人 " );
// IE是以0为下标基数的,而不是1
if ( ! document.all)
results = x.selectSingleNode( " /people/person[2] " );
else
results = x.selectSingleNode( " /people/person[1] " );
alert(results.xml)
alert( " 获得住址在donver街上的人 " );
results = x.selectNodes( " //person[address/@city='denver'] " );
for ( var i = 0 ; i results.length;i ++ )alert(results[i].xml)
if ( ! document.all){
// 获得所有街名中带south的地址
results = x.selectNodes( " //address[contains(@street, 'south')] " );
alert(results[ 0 ].xml);
} else {
alert( " IE不支持 //address[contains(@street, 'south')] 这种查询方式 " )
}
// --
/ SCRIPT
/ HEAD
BODY
/ BODY
/ HTML
例子引自 http://kb.mozillazine.org/XPath 。从例子可以看到,IE对xpath的支持还是有限度的。
来源:http://www.tulaoshi.com/n/20160219/1627024.html
看过《FireFox对XML的处理兼容IE的节点处理方法》的人还看了以下文章 更多>>