亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

瀏覽器兼容的JS寫法總結

2019-11-20 10:12:06
字體:
來源:轉載
供稿:網友

一、元素查找問題
1. document.all[name]
  (1)現有問題:Firefox不支持document.all[name]
  (2)解決方法:使用getElementsByName(name),getElementById(id)等來替代。

2. 集合類對象問題
  (1)現有問題:IE中對許多集合類對象取用時可以用 (),但在Firefox只能用[]。
      如:IE中可以使用document.forms("formName")來返回名字為"formName"的Form,但在Firefox卻行不通。
   (2)解決方法:使用[],上例中可以改為document.forms["formName"]

3. HTML元素的ID在JavaScript可見
  (1)現有問題:IE中HTML元素中的ID可以作為document的下屬對象變量名直接使用。在Firefox中不能。
  (2)解決方法:使用getElementById("idName")代替idName作為對象變量使用。

4. eval(idName)取得對象
  (1)現有問題:在IE中,利用eval(idName)可以取得ID為idName的HTML對象,在Firefox中不能。
  (2)解決方法:用 getElementById(idName) 代替 eval(idName)。 

5. 變量名與某HTML對象ID相同
  (1)現有問題:在Firefox中,因為對象ID不作為HTML對象的名稱,所以可以使用與HTML對象id相同的變量名,IE中不能。
  (2)解決方法:在聲明變量時,一律加上var,以避免歧義,這樣在IE中亦可正常運行。此外,最好不要取與HTML對象id相同的變量名,以減少錯誤。

注:3、4和5都屬于同一類的問題。

6. Frame
  (1)現有問題:在IE中可以用window.top.frameId和window.top.frameName來得到該Frame所代表的Window,Firefox中只能用window.top.frameName。
  (2)解決方法:將Frame的Id和Name設置成相同,使用window.top.frameName來訪問Frame。

二、DOM操作
1. 設置元素的文本內容。
  (1)現有問題:IE使用innerText,而Firefox使用textContent來設置元素文本內容。
  (2)解決方法:如果文本內容不包含"<"和">"等特殊字符,可以使用innerHTML。否則,可以使用:
   

   var child = elem.firstChild;      if (child != null) elem.removeChild(child);      elem.appendChild(document.createTextNode(content));

2. parentElement,parent.children
  (1)現有問題:IE可以使用parentElement獲得父結點,parent.children得到結點的所有孩子結點。Firefox不支持。
  (2)解決方法:使用parentNode和parent.childNodes。

3. 對childNodes的解釋。
  (1)現有問題:IE和Firefox中對childNodes的解釋不同,IE不會包含空白文本結點,而Firefox會包含。
  (2)解決方法:使用childNodes過濾文本結點,如下: 

   var children = elem.childNodes;     for (i = 0; i < children.length; i++) {      if (children[i].nodeType != 3) { // 過濾文本結點       // ...      }     }

4. 對document.getElementsByName的解釋。
  (1)現有問題:IE中getElementsByName只會檢查<input>和<img>元素,而在Firefox下會檢查所有元素。
  (2)解決方法:不要使用getElementsByName檢查除<input>和<img>之外的元素,如果要獲得單個元素,盡量使用getElementById。

5. 對document.getElementById的解釋。
  (1)現有問題:IE中getElementById不僅檢查Id屬性,也會檢查Name屬性,當Name屬性匹配參數時也會返回該元素。而在Firefox中只會檢查Id屬性。
  (2)解決方法:盡量保持Id和Name相同,不要讓一個元素name屬性和另一個元素的id屬性相同。 

三、事件
1. event.x與event.y問題
  (1)現有問題:在IE中,event對象有x,y 屬性,Firefox中沒有。
  (2)解決方法:在Firefox中,與event.x 等效的是 event.pageX??梢允褂茫?br />      mX = event.x ? event.x : event.pageX;     

2. window.event
  (1)現有問題:使用window.event無法在Firefox上運行
  (2)解決方法:
         原代碼(可在IE中運行):       

   <input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit()"/>      ...      <script language="javascript">        function gotoSubmit() {          ...          alert(window.event);  // use window.event          ...        }      </script>

        新代碼(可在IE和Firefox中運行):         

  <input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit(event)"/>      ...      <script language="javascript">        function gotoSubmit(evt) {          evt = evt ? evt : (window.event ? window.event : null);          ...          alert(evt);       // use evt          ...        }      </script>

3. attachEvent和addEventListener
  (1)現有問題:IE中使用attachEvent來添加事件,Firefox中使用addEventListener。
  (2)解決方法:如下,注意事件參數的區別,一個是click,一個是onclick。
        if (document.attachEvent) document.attachEvent("click", clickHandler,false);
        else document.addEventListener("onclick",clickHandler);

四、語法
1. const
  (1)現有問題:在IE中不能使用const關鍵字。如const constVar = 32;在IE中這是語法錯誤。
  (2)解決方法:不使用const,以var代替。

2. 多余的逗號
  (1)現有問題:firefox中對象文字常量容許多余的逗號,在IE中不允許。下面語句在IE中非法。
      var obj = { 'key' : 'aaa', }
  (2)解決方法:去掉多余逗號。 

五、XML
1. 創建XMLHttpRequest
  (1)現有問題:Firefox使用XMLHttpRequest,IE使用ActiveXObject。
  (2)解決方法:  

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

2. 創建DOM
  (1)現有問題:Firefox和IE創建DOM的方式不同。
  (2)解決方法:      

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

3. 加載XML
  (1)現有問題:如果要加載外部文件IE和Firefox都可以用:
          oXmlDom.async=false;      // 這在Firefox中是必須的
          oXmlDom.load("test.xml");
     但是它們加載xml字符串的方式不一樣,IE中直接可以使用oXmlDom.loadXML("<root><child/></root>"),而Firefox要使用DOMParser:
        var oParser = new DOMParser();
          var oXmlDom = oParser.parseFromString("<root/>", "text/xml");
  (2)解決方法:比較好的方法是給Firefox產生的XMLDom加上loadXML方法:
        if (isFirefox) { // 需要瀏覽器檢測   

    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 < oXmlDom.childNodes.length; i++) {       var oNewNode = this.importNode(oXmlDom.childNodes[i], true);       this.appendChild(oNewNode);      }     }    }

      這樣在IE和Firefox就可以調用loadXML方法了。

4. XPath支持
  (1)現有問題:IE中可以直接用XmlDOM的selectNodes來根據XPath表示式來選擇結點,Firefox則比較復雜,需要使用XPathEvaluator。
     IE:    

  var lstNodes = oXmlDom.documentElement.selectNodes("employee/name");    for (var i = 0; i < lstNodes.length; i++) {     alert(lstNodes[i].firstChild.nodeValue);    }

     Firefox:        

  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();     }

  (2)解決方法:比較好的方法給Firefox的Element添加selectNodes方法。      

 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;      }   }

   這樣在IE和Firefox中就都可以調用selectNodes方法了。  

5. XSLT支持
  (1)現有問題:IE中可以使用XmlDOM的transferNode方法將其轉換成html,而Firefox需要使用XSLTProcessor。
  IE:    

  oXmlDom.load("employee.xml");    oXslDom.load("employee.xslt");    var sResult=oXmlDom.transformNode(oXslDom);

    Firefox:     

  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);

  (2)解決方法:比較好的方法給Firefox的Node添加transferNode方法。      

 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;     }    }

   這樣在IE和Firefox中就都可以調用transferNode方法了。

以上就是針對瀏覽器兼容的JS寫法的總結,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久国色av免费观看性色| 亚洲第一在线视频| 81精品国产乱码久久久久久| 欧美日韩国产精品专区| 国产一区玩具在线观看| 久久精品成人一区二区三区| 亚洲第一页自拍| 日韩在线观看免费全集电视剧网站| 一本大道香蕉久在线播放29| 久久成人国产精品| 久久影院中文字幕| 成人免费在线网址| 黑人巨大精品欧美一区二区一视频| 美女扒开尿口让男人操亚洲视频网站| 欧美一区二区三区精品电影| 国产亚洲美女久久| 亚洲一区二区三区sesese| www.久久久久久.com| 97婷婷大伊香蕉精品视频| 久久久久国产精品免费网站| 91精品91久久久久久| 91精品国产乱码久久久久久久久| 国产成人久久精品| 国产精品亚洲激情| 不卡毛片在线看| 尤物九九久久国产精品的特点| 欧美一区二区三区……| 欧洲美女免费图片一区| 国产精品视频区1| 国产精品福利在线观看网址| 成人国产精品av| 欧美在线xxx| 国产精品伦子伦免费视频| 国产日韩中文在线| 91国产视频在线播放| 日本19禁啪啪免费观看www| 国产精品免费看久久久香蕉| 欧美激情国产日韩精品一区18| 丝袜亚洲欧美日韩综合| 亚洲人成在线免费观看| 亚洲女人天堂成人av在线| 久久成人人人人精品欧| 欧美孕妇孕交黑巨大网站| 国产丝袜一区视频在线观看| 日本精品视频在线观看| 久久精品2019中文字幕| 在线观看国产欧美| 日韩有码在线播放| 欧美午夜精品伦理| 国产亚洲激情在线| 久久久精品久久久| 午夜精品视频在线| 久久久噜噜噜久久| 成人免费看黄网站| 日韩亚洲精品电影| 欧美亚洲国产精品| 国内精品中文字幕| 亚洲精品黄网在线观看| 亚洲精品一区在线观看香蕉| 欧美夫妻性生活xx| 国产日韩视频在线观看| 亚洲精品中文字幕女同| 欧美精品一本久久男人的天堂| 亚洲综合日韩中文字幕v在线| www.精品av.com| 一区二区中文字幕| 欧美成人全部免费| 亚洲欧美另类人妖| 欧美午夜精品在线| 亚洲国产小视频在线观看| 国产精品看片资源| 日韩美女av在线免费观看| 中文字幕精品—区二区| 久久精品视频中文字幕| 国产精品无码专区在线观看| 日韩在线中文字| 国产精品丝袜久久久久久高清| 在线观看国产成人av片| 国产亚洲欧美aaaa| 亚洲欧美国产一本综合首页| 欧美极品美女视频网站在线观看免费| 久久香蕉精品香蕉| 97精品国产97久久久久久| 国产精品日韩专区| 国产精品入口日韩视频大尺度| 亚洲国产精彩中文乱码av| 亚洲精品成a人在线观看| 欧美xxxwww| 91av中文字幕| 尤物tv国产一区| 亚洲国产精品成人精品| 亚洲国产天堂网精品网站| 日韩最新在线视频| 在线观看久久av| 中文字幕日韩在线视频| 国产不卡在线观看| 色先锋久久影院av| 理论片在线不卡免费观看| 亚洲精品ady| 国产亚洲欧美一区| 久久久久亚洲精品| 91欧美日韩一区| www.久久久久久.com| 疯狂做受xxxx欧美肥白少妇| 成人网在线免费看| 国产日本欧美一区二区三区在线| 中文日韩在线观看| 日韩中文字幕网| 欧美性xxxx极品hd欧美风情| 国产美女久久久| 国产一级揄自揄精品视频| 欧美激情亚洲综合一区| 久久久电影免费观看完整版| 中文字幕在线成人| 日韩有码片在线观看| 欧美日韩午夜剧场| 久久久国产精品x99av| 日韩免费在线看| 国产精品亚洲欧美导航| 欧美成人一区在线| 92国产精品视频| 欧美国产精品人人做人人爱| 国产在线98福利播放视频| 日本国产高清不卡| 成人激情视频在线| 日韩av日韩在线观看| 精品成人乱色一区二区| 国产欧美一区二区三区久久人妖| 久久久久免费精品国产| 国产精品偷伦免费视频观看的| 91国产视频在线| 久久久国产一区二区三区| 亚洲自拍高清视频网站| 91精品久久久久久久久不口人| 国产日韩综合一区二区性色av| 黄色精品在线看| 亚洲变态欧美另类捆绑| 美女久久久久久久久久久| 91免费电影网站| 国产精品福利在线观看网址| 久久久www成人免费精品张筱雨| 亚洲精品99久久久久| 欧美日韩xxx| 日韩大陆欧美高清视频区| 亚洲香蕉成人av网站在线观看| 亚洲精品美女在线观看| 亚洲精品国产免费| 日韩免费av片在线观看| 国产精品久久久久久搜索| 欧美一级免费视频| 亚洲电影免费观看高清完整版在线观看| 亚洲japanese制服美女| 国产一区二区三区高清在线观看| 欧美极品少妇xxxxⅹ免费视频| 欲色天天网综合久久| 日韩女优在线播放| 欧美高清在线播放| 欧美在线影院在线视频| 亚洲日本成人女熟在线观看| 亚洲japanese制服美女| 欧美中文字幕在线观看| 国产成人久久久精品一区| 欧美一区二区三区四区在线| 一区二区三区无码高清视频|