怎样使用Javascript操作XMLDOM才能兼容IE、FireFox浏览器呢?
最近作了一个项目用到了AJAX技术,总算是赶了一回时髦不至于让自己太落伍。项目虽然已经完成,不过过程确并不十分顺利。遇到最大的问题就是如何兼容Firefox浏览器使Javascript能正确操作XMLDOM,经过若干次失败,总算把遇到的问题一一解决。这里总结了几个常用的Javascript方法:
1. 创建XMLDOM对象
var domDoc = false;
domDoc = document.implementation.createDocument("text/xml", "", null);
domDoc = document.implementation.createDocument("text/xml", "", null);
2. 加载XML DOCUMENT
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);
}
{
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);
}
3. 选择匹配XPath表达式的节点集合
Element.prototype.selectNodes = function(cXPathString)
{
if(this.ownerDocument.selectNodes)
{
return this.ownerDocument.selectNodes(cXPathString, this);
}
else
{
throw "For XML Elements Only";
}
}
{
if(this.ownerDocument.selectNodes)
{
return this.ownerDocument.selectNodes(cXPathString, this);
}
else
{
throw "For XML Elements Only";
}
}
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;
}
{
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;
}
4. 获得节点的值
function GetNodeValue(objXmlElement)
{
var str = "";
if(window.XMLHttpRequest) //Mozilla
{
try
{
str = obj.firstChild.nodeValue;
}
catch(ex)
{
str = "";
}
}
else if(window.ActiveXObject) //IE
{
str = obj.text;
}
return str;
}
由于水平有限,这里仅列举了几个常用的函数,争取以后能不断完善。如果您有不同意见,请指正!在下不胜感激~~~