浏览器兼容的JS写法总结
2. 多余的逗号 五、XML if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); } 2. 创建DOM function createXmlDom() { var oXmlDom; if (Window.ActiveXObject) { // IE oXmlDom = new ActiveXObject("Microsoft.XmlDom"); } else { // Firefox oXmlDom = document.implementation.createDocument("", "", null); } } 3. 加载XML Document.prototype.loadXML = function(sXml) { var oParser = new DOMParser(); var oXmlDom = oParser.parseFromString(sXml, "text/xml"); while (this.firstChild) this.removeChild(this.firstChild); for (var i = 0; i lt; oXmlDom.childNodes.length; i++) { var oNewNode = this.importNode(oXmlDom.childNodes[i], true); this.appendChild(oNewNode); } } } nbsp;nbsp;nbsp;nbsp;nbsp; 这样在IE和Firefox就可以调用loadXML方法了。 4. XPath支持 var lstNodes = oXmlDom.documentElement.selectNodes("employee/name"); for (var i = 0; i lt; lstNodes.length; i++) { alert(lstNodes[i].firstChild.nodeValue); } nbsp;nbsp;nbsp;nbsp; Firefox:nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; var oEvaluator = new XPathEvaluator(); var oResult = oEvaluator.evaluate("employee/name", oXmlDom.documentElement, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); var oElement = oResult.iterateNext(); while (oElement) { alert(oElement.firstChild.nodeValue); oElement = oResult.iterateNext(); } nbsp; (2)解决方法:比较好的方法给Firefox的Element添加selectNodes方法。nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if (isFirefox) { // 需要浏览器检测 Element.prototype.selectNodes = function(sXPath) { var oEvaluator = new XPathEvaluator(); var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); var aNodes = new Array(); if (oResult != null) { var oElement = oResult.iterateNext(); while (oElement) { aNodes.push(oElement); oElement = oResult.iterateNext(); } } return aNodes; } } nbsp;nbsp; 这样在IE和Firefox中就都可以调用selectNodes方法了。nbsp;nbsp; 5. XSLT支持 oXmlDom.load("employee.xml"); oXslDom.load("employee.xslt"); var sResult=oXmlDom.transformNode(oXslDom); nbsp;nbsp;nbsp; Firefox:nbsp;nbsp;nbsp;nbsp;nbsp; var oProcessor = new XSLTProcessor(); oProcessor.importStylesheet(oXslDom); var oResultDom = oProcessor.transformToDocument(oXmlDom); var oSerializer = new XMLSerializer(); var sXml = oSerializer.serializeToString(oResultDom, "text/xml"); alert(sXml); nbsp; (2)解决方法:比较好的方法给Firefox的Node添加transferNode方法。nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if (isFirefox) { // 需要浏览器检测 Node.prototype.transformNode = function(oXslDom) { var oProcessor = new XSLTProcessor(); oProcessor.importStylesheet(oXslDom); var oResultDom = oProcessor.transformToDocument(oXmlDom); var oSerializer = new XMLSerializer(); var sXml = oSerializer.serializeToString(oResultDom, "text/xml"); return sXml; } } nbsp;nbsp; 这样在IE和Firefox中就都可以调用transferNode方法了。 以上就是针对浏览器兼容的JS写法的总结,希望对大家的学习有所帮助。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |