Javascript下IE与Firefox下的差异兼容写法总结


Posted in Javascript onJune 18, 2010

window.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)。

clientX,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的问题。

Javascript 相关文章推荐
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
Aug 06 Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 Javascript
ReactNative页面跳转实例代码
Sep 27 Javascript
用AngularJS来实现监察表单按钮的禁用效果
Nov 02 Javascript
Vue.js路由组件vue-router使用方法详解
Dec 02 Javascript
Js利用Canvas实现图片压缩功能
Sep 13 Javascript
ES6学习教程之模板字符串详解
Oct 09 Javascript
jQuery实现常见的隐藏与展示列表效果示例
Jun 04 jQuery
重学JS 系列:聊聊继承(推荐)
Apr 11 Javascript
Vue多选列表组件深入详解
Mar 02 Vue.js
js打印纸函数代码(递归)
Jun 18 #Javascript
jquery 弹出层注册页面等(asp.net后台)
Jun 17 #Javascript
jquery 多行滚动代码(附详细解释)
Jun 17 #Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
Jun 14 #Javascript
jQuery+jqmodal弹出窗口实现代码分明
Jun 14 #Javascript
ExtJS 设置级联菜单的默认值
Jun 13 #Javascript
js 未结束的字符串常量错误解决方法
Jun 13 #Javascript
You might like
DIY实用性框形天线
2021/03/02 无线电
利用 window_onload 实现select默认选择
2006/10/09 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
详解php中反射的应用
2016/03/15 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
extJs 下拉框联动实现代码
2010/04/09 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
js+html制作简单验证码
2017/02/16 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
介绍一下Java中标识符的命名规则
2014/02/03 面试题
公务员总结性个人自我评价
2013/12/05 职场文书
建房协议书
2014/04/11 职场文书
优秀教师申报材料
2014/12/16 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
员工手册编写范本
2015/05/14 职场文书