加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

浏览器兼容的JS写法总结

发布时间:2016-11-25 11:36:16 所属栏目:Windows 来源:站长网
导读:一、元素查找问题 1. document.all[name] nbsp; (1)现有问题:Firefox不支持document.all[name] nbsp; (2)解决方法:使用getElementsByName(name),getElementById(id)等来替代。 2. 集合类对象问题 nbsp; (1)现有问题:IE中对许多集合类对象取用时可以用

2. 多余的逗号
nbsp; (1)现有问题:firefox中对象文字常量容许多余的逗号,在IE中不允许。下面语句在IE中非法。
nbsp;nbsp;nbsp;nbsp;nbsp; var obj = { 'key' : 'aaa', }
nbsp; (2)解决方法:去掉多余逗号。nbsp;

五、XML
1. 创建XMLHttpRequest
nbsp; (1)现有问题:Firefox使用XMLHttpRequest,IE使用ActiveXObject。
nbsp; (2)解决方法:nbsp;nbsp;

  if (window.XMLHttpRequest) {
     req = new XMLHttpRequest();
   } else if (window.ActiveXObject) {
     req = new ActiveXObject("Microsoft.XMLHTTP");
   }

2. 创建DOM
nbsp; (1)现有问题:Firefox和IE创建DOM的方式不同。
nbsp; (2)解决方法:nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;

 function createXmlDom() {
     var oXmlDom;
     if (Window.ActiveXObject) { // IE
      oXmlDom = new ActiveXObject("Microsoft.XmlDom");
     } else { // Firefox
      oXmlDom = document.implementation.createDocument("", "", null);
     }
    }

3. 加载XML
nbsp; (1)现有问题:如果要加载外部文件IE和Firefox都可以用:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; oXmlDom.async=false;nbsp;nbsp;nbsp;nbsp;nbsp; // 这在Firefox中是必须的
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; oXmlDom.load("test.xml");
nbsp;nbsp;nbsp;nbsp; 但是它们加载xml字符串的方式不一样,IE中直接可以使用oXmlDom.loadXML("lt;rootgt;lt;child/gt;lt;/rootgt;"),而Firefox要使用DOMParser:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; var oParser = new DOMParser();
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; var oXmlDom = oParser.parseFromString("lt;root/gt;", "text/xml");
nbsp; (2)解决方法:比较好的方法是给Firefox产生的XMLDom加上loadXML方法:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if (isFirefox) { // 需要浏览器检测nbsp;nbsp;nbsp;

    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支持
nbsp; (1)现有问题:IE中可以直接用XmlDOM的selectNodes来根据XPath表示式来选择结点,Firefox则比较复杂,需要使用XPathEvaluator。
nbsp;nbsp;nbsp;nbsp; IE:nbsp;nbsp;nbsp;nbsp;

  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支持
nbsp; (1)现有问题:IE中可以使用XmlDOM的transferNode方法将其转换成html,而Firefox需要使用XSLTProcessor。
nbsp; IE:nbsp;nbsp;nbsp;nbsp;

  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写法的总结,希望对大家的学习有所帮助。

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读