Javascript下IE與Firefox下的差異兼容寫法總結(jié)
更新時間:2010年06月18日 11:56:37 作者:
總結(jié)一部分IE和Firefox的javascript差異寫法,對于像書寫多瀏覽器兼容性更好的代碼,可以參考下。
window.event對象差異
IE:有window.event對象
FF:沒有window.event對象??梢酝ㄟ^給函數(shù)的參數(shù)傳遞event對象。如onmousemove=doMouseMove(event)
獲取鼠標(biāo)當(dāng)前坐標(biāo)
IE:event.x和event.y。
FF:event.pageX和event.pageY。
通用:兩者都有event.clientX和event.clientY屬性。
鼠標(biāo)當(dāng)前坐標(biāo)(加上滾動條滾過的距離)
IE:event.offsetX和event.offsetY。
FF:event.layerX和event.layerY。
標(biāo)簽的x和y的坐標(biāo)位置:style.posLeft 和 style.posTop
IE:有。
FF:沒有。
通用:object.offsetLeft 和 object.offsetTop。
獲取窗體的高度和寬度
IE:document.body.offsetWidth和document.body.offsetHeight。注意:此時頁面一定要有body標(biāo)簽。
FF:window.innerWidth和window.innerHegiht,以及document.documentElement.clientWidth和document.documentElement.clientHeight。
通用:document.body.clientWidth和document.body.clientHeight。
添加事件
IE:element.attachEvent(”onclick”, func);。
FF:element.addEventListener(”click”, func, true)。
通用:element.onclick=func。雖然都可以使用onclick事件,但是onclick和上面兩種方法的效果是不一樣的,onclick只有執(zhí)行一個過程,而attachEvent和addEventListener執(zhí)行的是一個過程列表,也就是多個過程。例如:element.attachEvent(”onclick”, func1);element.attachEvent(”onclick”, func2)這樣func1和func2都會被執(zhí)行。
在這里斷橋殘雪,曾經(jīng)寫過一個通用的添加刪除綁定事件的函數(shù),大家可以查看以下文章:《JavaScript跨瀏覽器的添加刪除事件綁定函數(shù)》
標(biāo)簽的自定義屬性
IE:如果給標(biāo)簽div1定義了一個屬性value,可以div1.value和div1["value"]取得該值。
FF:不能用div1.value和div1["value"]取。
通用:div1.getAttribute(”value”)。
父節(jié)點(diǎn)、子節(jié)點(diǎn)和刪除節(jié)點(diǎn)
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft
screenX:鼠標(biāo)在顯示屏幕上的坐標(biāo)。
clientX:鼠標(biāo)在頁面顯示區(qū)域的坐標(biāo)。
注:以上兩個都是各瀏覽器通用的。以下為特有方法:
pageX:FF特有,鼠標(biāo)在頁面上的位置,從頁面左上角開始定位,這個可以很方便在整個頁面上進(jìn)行定位,IE沒有直接替換的屬性。
layerX:FF特有,鼠標(biāo)相對于“觸發(fā)事件的元素的層級關(guān)系中離該元素最近的,設(shè)置了position的父元素”的邊界的位置,從border的左上角開始定位,即如果這個父元素存在border,則坐標(biāo)原點(diǎn)在border的左上角,而不是內(nèi)容區(qū)域的左上角。
offsetX:IE特有,鼠標(biāo)相對于“觸發(fā)事件的元素”的位置,從內(nèi)容區(qū)域左上角開始定位,不是從border左上角開始!這個屬性比較好用,用來判斷鼠標(biāo)點(diǎn)在一個元素中的哪個位置很方便,F(xiàn)F沒有直接替換的屬性。
x:IE特有,跟layerX一個效果,可作為layerX的直接替換屬性。
注:IE和FF的定位有個1px的差別,實(shí)際上,IE的定位從0開始,F(xiàn)F的定位從1開始,F(xiàn)F永遠(yuǎn)會比IE大1px,需要根據(jù)實(shí)際情況處理。
offsetLeft:這個屬性不是事件對象的屬性,而是DOM對象所有的,該屬性表示的是DOM對象在“該DOM對象的層級關(guān)系中離該對象最近的,設(shè)置了position的父對象”中的位置,雖然話是這么說的,但是不同的瀏覽器效果不一樣。
FF中嚴(yán)格按上述說明執(zhí)行,但是在IE6/7中,這個屬性返回該DOM對象在其直接父對象中的位置,但是IE8改正了這個問題,不過IE8又有了一個新問題,其他的瀏覽器都是從父對象的內(nèi)容區(qū)域的左上角開始定位,IE8確是從父元素的border的左上角開始定位,由于測試環(huán)境為IETester中的IE8,不能排除是IETester的問題。
IE:有window.event對象
FF:沒有window.event對象??梢酝ㄟ^給函數(shù)的參數(shù)傳遞event對象。如onmousemove=doMouseMove(event)
獲取鼠標(biāo)當(dāng)前坐標(biāo)
IE:event.x和event.y。
FF:event.pageX和event.pageY。
通用:兩者都有event.clientX和event.clientY屬性。
鼠標(biāo)當(dāng)前坐標(biāo)(加上滾動條滾過的距離)
IE:event.offsetX和event.offsetY。
FF:event.layerX和event.layerY。
標(biāo)簽的x和y的坐標(biāo)位置:style.posLeft 和 style.posTop
IE:有。
FF:沒有。
通用:object.offsetLeft 和 object.offsetTop。
獲取窗體的高度和寬度
IE:document.body.offsetWidth和document.body.offsetHeight。注意:此時頁面一定要有body標(biāo)簽。
FF:window.innerWidth和window.innerHegiht,以及document.documentElement.clientWidth和document.documentElement.clientHeight。
通用:document.body.clientWidth和document.body.clientHeight。
添加事件
IE:element.attachEvent(”onclick”, func);。
FF:element.addEventListener(”click”, func, true)。
通用:element.onclick=func。雖然都可以使用onclick事件,但是onclick和上面兩種方法的效果是不一樣的,onclick只有執(zhí)行一個過程,而attachEvent和addEventListener執(zhí)行的是一個過程列表,也就是多個過程。例如:element.attachEvent(”onclick”, func1);element.attachEvent(”onclick”, func2)這樣func1和func2都會被執(zhí)行。
在這里斷橋殘雪,曾經(jīng)寫過一個通用的添加刪除綁定事件的函數(shù),大家可以查看以下文章:《JavaScript跨瀏覽器的添加刪除事件綁定函數(shù)》
標(biāo)簽的自定義屬性
IE:如果給標(biāo)簽div1定義了一個屬性value,可以div1.value和div1["value"]取得該值。
FF:不能用div1.value和div1["value"]取。
通用:div1.getAttribute(”value”)。
父節(jié)點(diǎn)、子節(jié)點(diǎn)和刪除節(jié)點(diǎn)
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft
screenX:鼠標(biāo)在顯示屏幕上的坐標(biāo)。
clientX:鼠標(biāo)在頁面顯示區(qū)域的坐標(biāo)。
注:以上兩個都是各瀏覽器通用的。以下為特有方法:
pageX:FF特有,鼠標(biāo)在頁面上的位置,從頁面左上角開始定位,這個可以很方便在整個頁面上進(jìn)行定位,IE沒有直接替換的屬性。
layerX:FF特有,鼠標(biāo)相對于“觸發(fā)事件的元素的層級關(guān)系中離該元素最近的,設(shè)置了position的父元素”的邊界的位置,從border的左上角開始定位,即如果這個父元素存在border,則坐標(biāo)原點(diǎn)在border的左上角,而不是內(nèi)容區(qū)域的左上角。
offsetX:IE特有,鼠標(biāo)相對于“觸發(fā)事件的元素”的位置,從內(nèi)容區(qū)域左上角開始定位,不是從border左上角開始!這個屬性比較好用,用來判斷鼠標(biāo)點(diǎn)在一個元素中的哪個位置很方便,F(xiàn)F沒有直接替換的屬性。
x:IE特有,跟layerX一個效果,可作為layerX的直接替換屬性。
注:IE和FF的定位有個1px的差別,實(shí)際上,IE的定位從0開始,F(xiàn)F的定位從1開始,F(xiàn)F永遠(yuǎn)會比IE大1px,需要根據(jù)實(shí)際情況處理。
offsetLeft:這個屬性不是事件對象的屬性,而是DOM對象所有的,該屬性表示的是DOM對象在“該DOM對象的層級關(guān)系中離該對象最近的,設(shè)置了position的父對象”中的位置,雖然話是這么說的,但是不同的瀏覽器效果不一樣。
FF中嚴(yán)格按上述說明執(zhí)行,但是在IE6/7中,這個屬性返回該DOM對象在其直接父對象中的位置,但是IE8改正了這個問題,不過IE8又有了一個新問題,其他的瀏覽器都是從父對象的內(nèi)容區(qū)域的左上角開始定位,IE8確是從父元素的border的左上角開始定位,由于測試環(huán)境為IETester中的IE8,不能排除是IETester的問題。
相關(guān)文章
JavaScript實(shí)現(xiàn)通過select標(biāo)簽跳轉(zhuǎn)網(wǎng)頁的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)通過select標(biāo)簽跳轉(zhuǎn)網(wǎng)頁的方法,涉及javascript事件響應(yīng)及窗口操作相關(guān)技巧,需要的朋友可以參考下2016-09-09JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法詳解
這篇文章主要介紹了JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法,結(jié)合實(shí)例形式總結(jié)分析了javascript二叉樹的先序、中序及后序遍歷實(shí)現(xiàn)方法與相關(guān)操作注意事項,需要的朋友可以參考下2017-10-10lhgcalendar時間插件限制只能選擇三個月的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猯hgcalendar時間插件限制只能選擇三個月的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07javascript下高性能字符串連接StringBuffer類
使用StringBuffer類比使用加號節(jié)省50%左右的時間,大家對于大數(shù)據(jù)的連接最好使用這個方法。2010-08-08JavaScript中內(nèi)置函數(shù)Map()的使用
Map()是JavaScript中內(nèi)置的一種數(shù)據(jù)結(jié)構(gòu),它允許您將鍵值對映射到任意類型的值,主要介紹了JavaScript中內(nèi)置函數(shù)Map()的使用,感興趣的可以了解一下2023-05-05