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 相关文章推荐
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
Mar 16 Javascript
jquery isType() 类型判断代码
Feb 14 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
Jan 15 Javascript
connect中间件session、cookie的使用方法分享
Jun 17 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
Sep 23 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
Dec 18 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
Aug 01 Javascript
关于原生js中bind函数的简单实现
Aug 10 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
Dec 22 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
Vue实现左右菜单联动实现代码
Aug 12 Javascript
JS闭包原理及其使用场景解析
Dec 03 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采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
详细介绍Python中的偏函数
2015/04/27 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
药学专业个人的自我评价
2013/12/31 职场文书
个人工作主要事迹
2014/05/08 职场文书
学雷锋宣传标语
2014/06/25 职场文书
大学生就业意向书
2015/05/11 职场文书
工作一年自我鉴定
2019/06/20 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android