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 高级篇之闭包、模拟类,继承(五)
Apr 07 Javascript
通过上下左右键和回车键切换光标实现代码
Mar 08 Javascript
JavaScript原型链示例分享
Jan 26 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
Javascript函数的参数
Jul 16 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
Sep 01 Javascript
javascript中闭包概念与用法深入理解
Dec 15 Javascript
js图片放大镜效果实现方法详解
Oct 28 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
Jun 26 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
layui中layer前端组件实现图片显示功能的方法分析
Oct 13 Javascript
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
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
PHP常用代码
2006/11/23 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
php生成动态验证码gif图片
2015/10/19 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python中创建二维数组
2018/10/17 Python
python执行精确的小数计算方法
2019/01/21 Python
python装饰器练习题及答案
2019/11/01 Python
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
求职推荐信
2013/10/28 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
2014年学生会工作总结
2014/11/07 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL