IE和FF在對js支持的不同(整理)及解決方法
發(fā)布時間:2013-07-30 16:47:20 作者:佚名
我要評論

眾所周知IE和FF在對js支持不盡相同,本文整理了一些常用方法及屬性在IE和FF中的不同實(shí)現(xiàn),對此感興趣的朋友可以參考下,希望對大家學(xué)習(xí)IE和FF的js兼容有所幫助
1.window.event
IE:有window.event對象
FF:沒有window.event對象,可以通過函數(shù)的參數(shù)傳遞event對象。如onclick=clickHandler(event)
解決辦法:var event = event || window.event;
2. 鼠標(biāo)當(dāng)前坐標(biāo)
IE:event.x和event.y
FF:event.pageX和event.pageY
解決辦法:采用通用屬性:event.clientX和event.clientY屬性;
3. 鼠標(biāo)坐標(biāo)加上滾動條滾過的距離
IE:event.offsetX和event.offsetY
FF:event.layerX和event.layerY
解決辦法:
<script type="text/javascript">
function mouseDownHandler(event) {
var event = event || window.event;
//var event = event ? event : window.event;
var x = event.offsetX || event.layerX;
var y = event.offsetX || event.layerY;
}
</script>
3. event.srcElement
IE:event對象有srcElement屬性,但是沒有target屬性;
FF:event對象有target屬性,但沒有srcElement屬性
解決辦法:使用obj = event.srcElement ? event.srcElement : event.target;來代替IE下的event.srcElement或者FF下的event.target(注意event的兼容性);
4.event.toElement
IE:event對象有toElement屬性,但沒有relatedTarget屬性
FF:event對象沒有有toElement屬性,但有relatedTarget屬性
解決辦法:var target = e.relatedTarget || e.toElement;
5. 標(biāo)簽的x和y的坐標(biāo)位置,style.posLeft 和 style.posTop
IE:有
FF:沒有
解決辦法:用通用屬性obj.offsetLeft 和 obj.offsetTop
6. 窗體的高度和寬度
IE:document.body.offsetWidth 和 document.body.offsetHeight。注意,此時頁面一定要有body標(biāo)簽。
FF:window.innerWidth 和 window.innerHeight,以及 document.documentElement.clientWidth 和 document.documentElement.clientHeight。
解決辦法:通用屬性 document.body.clientWidth 和 document.body.clientHeight;
7. 添加事件
IE:element.attachEvent('onclick',function)
FF:element.addEventListener('click',function,true)
解決辦法:element.onclick = function.雖然都可以使用click事件。但onclick和上面兩種方法效果是不一樣的。onclick只有執(zhí)行一個過程,而attachEvent 和 addEventListener執(zhí)行的是一個過程列表,也就是多個過程。
如:element.attachEvent('onclick',func1); element.attachEvent("onclick", func2)這樣func1和func2都會被執(zhí)行。
8. 標(biāo)簽的自定義屬性
IE:如果給標(biāo)簽div1定義了一個屬性value,可以div1.value 和 div1["value"]取得該值
FF:不能用div1.value 和div1["value"]
解決辦法:div1.getAttribute('value')
9. document.form.item
IE:現(xiàn)有問題,document.formName.item("itemName") 這樣的語句,不能在 FF 下運(yùn)行
FF:不支持
解決辦法: document.formName.elements["elementName"]
10. 集合/數(shù)組類對象問題
IE:有許多集合類對象取用時用()
FF:不能這樣取用
解決辦法:改用[]作為下標(biāo)運(yùn)算。
如:document.forms("formName") 改為 document.forms["formName"]。document.getElementsByName("inputName")(1) 改為 document.getElementsByName("inputName")[1]
11. HTML對象的id作為對象名的問題
IE:HTML對象的id可以作為document的下屬變量名直接使用
FF:需要用getElementById()方法
解決辦法:用getElementById('idName')代替idName作為對象變量使用
12. 用idName字符串取得對象的問題
IE:利用eval(idName)可以取得 id 為 idName 的HTML對象。
FF:不支持
解決辦法:getElementById(idName) 代替 eval(idName)
13. 變量名與某 HTML 對象 id 相同的問題
IE:因?yàn)镠TML對象id 在IE中直接調(diào)用,所以變量名不能和id相同
FF:可以使用變量名和id相同
解決辦法,聲明變量時一律加上 var ,以避免歧義(最好id和變量名不要相同)。
14. document.getElementsByName() 和 document.all[name]
IE:getElementsByName()、document.all[name] 均不能用來取得 div 元素
FF:可以兼容document.all, 但會生成一條警告。
解決辦法:可以用getElementById() 或者 getElementByTagName()來代替
15. input.type屬性問題
IE:input.type屬性為只讀
FF:input.type屬性為讀寫
16. window.location.href
IE:(FF2.0以下),可以使用window.location 或 window.location.href ; FF 1.5下只能使用window.location
解決辦法:使用window.location 來代替 window.location.href
17. 模態(tài)和非模態(tài)窗口問題
IE:可以通過 showModalDialog 和 showModelessDialog 打開模態(tài)和非模態(tài)窗口
FF:不支持
解決辦法:直接使用window.open(pageURL, name, parameters) 方式打開新窗口,如果需要將子窗口中的參數(shù)傳遞回父窗口,可以在子窗口中使用window.opener來訪問父窗口。
如:var parWin = window.opener; parWin.document.getElementById('title').value = 'My Title';
18. body
IE:body必須在body標(biāo)簽被瀏覽器完全讀入后才存在
FF:body在body標(biāo)簽沒有被瀏覽器完全讀入之前就存在
19. 事件委托方法
IE:document.body.onload = init;
FF:document.body.onload = init();
解決辦法:統(tǒng)一使用 document.body.onload = new Function('init()'); 或者 docuement.body.onload = function(){/* 這里是代碼 */}
20. 父元素的區(qū)別
IE:obj.parentElement;
FF :obj.parentNode
解決辦法:因?yàn)镕F與IE都支持DOM,所以可以都使用obj.parentNode
22.innerText在IE中能正常工作,但是innerText在FF中卻不行. 需用textContent
23. FF中設(shè)置HTML標(biāo)簽的style時,所有位置性和字體尺寸的值必須后跟px。這個IE也是支持的
24. 父節(jié)點(diǎn)、子節(jié)點(diǎn)和刪除節(jié)點(diǎn)
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。
IE:有window.event對象
FF:沒有window.event對象,可以通過函數(shù)的參數(shù)傳遞event對象。如onclick=clickHandler(event)
解決辦法:var event = event || window.event;
2. 鼠標(biāo)當(dāng)前坐標(biāo)
IE:event.x和event.y
FF:event.pageX和event.pageY
解決辦法:采用通用屬性:event.clientX和event.clientY屬性;
3. 鼠標(biāo)坐標(biāo)加上滾動條滾過的距離
IE:event.offsetX和event.offsetY
FF:event.layerX和event.layerY
解決辦法:
復(fù)制代碼
代碼如下:<script type="text/javascript">
function mouseDownHandler(event) {
var event = event || window.event;
//var event = event ? event : window.event;
var x = event.offsetX || event.layerX;
var y = event.offsetX || event.layerY;
}
</script>
3. event.srcElement
IE:event對象有srcElement屬性,但是沒有target屬性;
FF:event對象有target屬性,但沒有srcElement屬性
解決辦法:使用obj = event.srcElement ? event.srcElement : event.target;來代替IE下的event.srcElement或者FF下的event.target(注意event的兼容性);
4.event.toElement
IE:event對象有toElement屬性,但沒有relatedTarget屬性
FF:event對象沒有有toElement屬性,但有relatedTarget屬性
解決辦法:var target = e.relatedTarget || e.toElement;
5. 標(biāo)簽的x和y的坐標(biāo)位置,style.posLeft 和 style.posTop
IE:有
FF:沒有
解決辦法:用通用屬性obj.offsetLeft 和 obj.offsetTop
6. 窗體的高度和寬度
IE:document.body.offsetWidth 和 document.body.offsetHeight。注意,此時頁面一定要有body標(biāo)簽。
FF:window.innerWidth 和 window.innerHeight,以及 document.documentElement.clientWidth 和 document.documentElement.clientHeight。
解決辦法:通用屬性 document.body.clientWidth 和 document.body.clientHeight;
7. 添加事件
IE:element.attachEvent('onclick',function)
FF:element.addEventListener('click',function,true)
解決辦法:element.onclick = function.雖然都可以使用click事件。但onclick和上面兩種方法效果是不一樣的。onclick只有執(zhí)行一個過程,而attachEvent 和 addEventListener執(zhí)行的是一個過程列表,也就是多個過程。
如:element.attachEvent('onclick',func1); element.attachEvent("onclick", func2)這樣func1和func2都會被執(zhí)行。
8. 標(biāo)簽的自定義屬性
IE:如果給標(biāo)簽div1定義了一個屬性value,可以div1.value 和 div1["value"]取得該值
FF:不能用div1.value 和div1["value"]
解決辦法:div1.getAttribute('value')
9. document.form.item
IE:現(xiàn)有問題,document.formName.item("itemName") 這樣的語句,不能在 FF 下運(yùn)行
FF:不支持
解決辦法: document.formName.elements["elementName"]
10. 集合/數(shù)組類對象問題
IE:有許多集合類對象取用時用()
FF:不能這樣取用
解決辦法:改用[]作為下標(biāo)運(yùn)算。
如:document.forms("formName") 改為 document.forms["formName"]。document.getElementsByName("inputName")(1) 改為 document.getElementsByName("inputName")[1]
11. HTML對象的id作為對象名的問題
IE:HTML對象的id可以作為document的下屬變量名直接使用
FF:需要用getElementById()方法
解決辦法:用getElementById('idName')代替idName作為對象變量使用
12. 用idName字符串取得對象的問題
IE:利用eval(idName)可以取得 id 為 idName 的HTML對象。
FF:不支持
解決辦法:getElementById(idName) 代替 eval(idName)
13. 變量名與某 HTML 對象 id 相同的問題
IE:因?yàn)镠TML對象id 在IE中直接調(diào)用,所以變量名不能和id相同
FF:可以使用變量名和id相同
解決辦法,聲明變量時一律加上 var ,以避免歧義(最好id和變量名不要相同)。
14. document.getElementsByName() 和 document.all[name]
IE:getElementsByName()、document.all[name] 均不能用來取得 div 元素
FF:可以兼容document.all, 但會生成一條警告。
解決辦法:可以用getElementById() 或者 getElementByTagName()來代替
15. input.type屬性問題
IE:input.type屬性為只讀
FF:input.type屬性為讀寫
16. window.location.href
IE:(FF2.0以下),可以使用window.location 或 window.location.href ; FF 1.5下只能使用window.location
解決辦法:使用window.location 來代替 window.location.href
17. 模態(tài)和非模態(tài)窗口問題
IE:可以通過 showModalDialog 和 showModelessDialog 打開模態(tài)和非模態(tài)窗口
FF:不支持
解決辦法:直接使用window.open(pageURL, name, parameters) 方式打開新窗口,如果需要將子窗口中的參數(shù)傳遞回父窗口,可以在子窗口中使用window.opener來訪問父窗口。
如:var parWin = window.opener; parWin.document.getElementById('title').value = 'My Title';
18. body
IE:body必須在body標(biāo)簽被瀏覽器完全讀入后才存在
FF:body在body標(biāo)簽沒有被瀏覽器完全讀入之前就存在
19. 事件委托方法
IE:document.body.onload = init;
FF:document.body.onload = init();
解決辦法:統(tǒng)一使用 document.body.onload = new Function('init()'); 或者 docuement.body.onload = function(){/* 這里是代碼 */}
20. 父元素的區(qū)別
IE:obj.parentElement;
FF :obj.parentNode
解決辦法:因?yàn)镕F與IE都支持DOM,所以可以都使用obj.parentNode
22.innerText在IE中能正常工作,但是innerText在FF中卻不行. 需用textContent
23. FF中設(shè)置HTML標(biāo)簽的style時,所有位置性和字體尺寸的值必須后跟px。這個IE也是支持的
24. 父節(jié)點(diǎn)、子節(jié)點(diǎn)和刪除節(jié)點(diǎn)
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。
相關(guān)文章
- 這篇文章主要介紹了淺談原生頁面兼容IE9問題的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起2020-12-16
新版chrome瀏覽器設(shè)置允許跨域的實(shí)現(xiàn)
這篇文章主要介紹了新版chrome瀏覽器設(shè)置允許跨域的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起2020-11-30css hack之\9和\0就可能對hack IE11\IE9\IE8無效
每次設(shè)計一張網(wǎng)頁或一個表單,都被各種瀏覽器的兼容問題傷透腦筋,尤其是IE家族。在做兼容性設(shè)計時,我們往往會使用各種瀏覽器能識別的獨(dú)特語法進(jìn)行hack,從而達(dá)到各種瀏覽2020-03-20css區(qū)分ie8/ie9/ie10/ie11 chrome firefox的代碼
這篇文章主要介紹了css區(qū)分ie8/ie9/ie10/ie11 chrome firefox的代碼,需要的朋友可以參考下2020-03-20- 這篇文章主要介紹了解決CSS瀏覽器兼容性問題的4種方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)2020-02-28
- 這篇文章主要介紹了常見的瀏覽器兼容性問題(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)2020-02-20
- 這篇文章主要介紹了border-radius IE8兼容處理的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)2020-02-12
- 這篇文章主要介紹了淺談遇到的幾個瀏覽器兼容性問題,詳細(xì)的介紹了幾種我遇到的問題和解決方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-26
- 這篇文章主要介紹了base64圖片在各種瀏覽器的兼容性處理的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-14
對常見的css屬性進(jìn)行瀏覽器兼容性總結(jié)(推薦)
這篇文章主要介紹了對常見的css屬性進(jìn)行瀏覽器兼容性總結(jié)(推薦)的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-20