Javascript在IE與Firefox下的差異寫法總結

來源:互聯網
上載者:User

indow.event對象差異

IE:有window.event對象
FF:沒有window.event對象。可以通過給函數的參數傳遞event對象。如onmousemove=doMouseMove(event)

取滑鼠當前座標

IE:event.x和event.y。
FF:event.pageX和event.pageY。
通用:兩者都有event.clientX和event.clientY屬性。

標當前座標(加上捲軸滾過的距離)

IE:event.offsetX和event.offsetY。
FF:event.layerX和event.layerY。

簽的x和y的座標位置:style.posLeft 和 style.posTop

IE:有。
FF:沒有。
通用:object.offsetLeft 和 object.offsetTop。

取表單的高度和寬度

IE:document.body.offsetWidth和document.body.offsetHeight。注意:此時頁面一定要有body標籤。
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只有執行一個過程,而attachEvent和addEventListener執行的是一個過程列表,也就是多個過程。例如:element.attachEvent(”onclick”, func1);element.attachEvent(”onclick”, func2)這樣func1和func2都會被執行。

在這裡斷橋殘雪,曾經寫過一個通用的添加刪除綁定事件的函數,大家可以查看以下文章:《JavaScript跨瀏覽器的添加刪除事件綁定函數》

簽的自訂屬性

IE:如果給標籤div1定義了一個屬性value,可以div1.value和div1["value"]取得該值。
FF:不能用div1.value和div1["value"]取。
通用:div1.getAttribute(”value”)。

節點、子節點和刪除節點

IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。

lientX,pageX,offsetX,x,layerX,screenX,offsetLeft

screenX:滑鼠在顯示螢幕上的座標。
clientX:滑鼠在頁面顯示地區的座標。
註:以上兩個都是各瀏覽器通用的。以下為特有方法:

pageX:FF特有,滑鼠在頁面上的位置,從頁面左上方開始定位,這個可以很方便在整個頁面上進行定位,IE沒有直接替換的屬性。
layerX:FF特有,滑鼠相對於“觸發事件的元素的層級關係中離該元素最近的,設定了position的父元素”的邊界的位置,從border的左上方開始定位,即如果這個父元素存在border,則座標原點在border的左上方,而不是內容地區的左上方。
offsetX:IE特有,滑鼠相對於“觸發事件的元素”的位置,從內容地區左上方開始定位,不是從border左上方開始!這個屬性比較好用,用來判斷滑鼠點在一個元素中的哪個位置很方便,FF沒有直接替換的屬性。
x:IE特有,跟layerX一個效果,可作為layerX的直接替換屬性。
註:IE和FF的定位有個1px的差別,實際上,IE的定位從0開始,FF的定位從1開始,FF永遠會比IE大1px,需要根據實際情況處理。

offsetLeft:這個屬性不是事件對象的屬性,而是DOM對象所有的,該屬性工作表示的是DOM對象在“該DOM對象的層級關係中離該對象最近的,設定了position的父物件”中的位置,雖然話是這麼說的,但是不同的瀏覽器效果不一樣。

FF中嚴格按上述說明執行,但是在IE6/7中,這個屬性返回該DOM對象在其直接父物件中的位置,但是IE8改正了這個問題,不過IE8又有了一個新問題,其他的瀏覽器都是從父物件的內容地區的左上方開始定位,IE8確是從父元素的border的左上方開始定位,由於測試環境為IETester中的IE8,不能排除是IETester的問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.