下面列出IE和非IE中常見的一些js兼容性問題。
//window.event
IE:有window.event對象
非IE:沒有window.event對象。能夠經過給函數的參數傳遞event對象。如onmousemove=doMouseMove(event) 數組
解除冒泡的方法不一樣瀏覽器
IE:window.event.cancelBubble=true;
非IE:event.stopPropagation();函數
IE:會忽略節點之間生成的空白文本節點(好比換行字符)firefox
非IE:不會忽略,會把節點之間的空白當成文本節點。orm
//鼠標當前座標
IE:event.x和event.y。
非IE:event.pageX和event.pageY。
通用:二者都有event.clientX和event.clientY屬性。
//event.srcElement問題
說明:IE下,event對象有srcElement屬性,可是沒有target屬性;Firefox下,even對象有target屬性,可是沒有srcElement屬性.
解決方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)來代替IE下的event.srcElement或者Firefox下的event.target. 請同時注意event的兼容性問題。
//添加事件
IE:element.attachEvent("onclick", function);。
非IE:element.addEventListener("click", function, true)。
通 用:element.onclick=function。雖然均可以使用onclick事件,可是onclick和上面兩種方法的效果是不同 的,onclick 只有執行一個過程,而attachEvent和addEventListener執行的是一個過程列表,也就是多個過程。例 如:element.attachEvent("onclick", func1);element.attachEvent("onclick", func2)這樣func1和func2都會被執行。
//標籤的自定義屬性
IE:若是給標籤div1定義了一個屬性value,能夠div1.value和div1["value"]取得該值。
非IE:不能用div1.value和div1["value"]取。
通用:div1.getAttribute("value")。
//集合/數組類對象問題
(1)現有問題:
現有代碼中許多集合類對象取用時使用 (),IE 能接受,MF 不能。
(2)解決方法:
改用 [] 做爲下標運算。如:document.forms("formName") 改成 document.forms["formName"]。
又如:document.getElementsByName("inputName")(1) 改成 document.getElementsByName("inputName")[1]
//HTML 對象的 id 做爲對象名的問題
(1)現有問題
在 IE 中,HTML 對象的 ID 能夠做爲 document 的下屬對象變量名直接使用。在 MF 中不能。
(2)解決方法
用 getElementById("idName") 代替 idName 做爲對象變量使用
//input.type屬性問題
說明:IE下input.type屬性爲只讀;可是Firefox下input.type屬性爲讀寫
//body問題
Firefox的body在body標籤沒有被瀏覽器徹底讀入以前就存在;而IE的body則必須在body標籤被瀏覽器徹底讀入以後才存在
//firefox與IE的父元素(parentElement)的區別
IE:obj.parentElement
非IE:obj.parentNode
解決方法: 由於非IE與IE都支持DOM,所以使用obj.parentNode是不錯選擇
//innerText在IE中能正常工做,可是innerText在FireFox中卻不行. 需用textContent
對象