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 相关文章推荐
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 Javascript
编写Js代码要注意的几条规则
Sep 10 Javascript
JavaScript 选中文字并响应获取的实现代码
Aug 28 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
jquery与prototype框架的详细对比
Nov 21 Javascript
JavaScript打印网页指定区域的例子
May 03 Javascript
JavaScript中return false的用法
Mar 12 Javascript
js实现发送验证码后的倒计时功能
May 28 Javascript
基于vue2.0+vuex的日期选择组件功能实现
Mar 13 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 Javascript
jquery学习笔记之无new构建详解
Dec 07 jQuery
详解关于vue2.0工程发布上线操作步骤
Sep 27 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 代码优化之经典示例
2011/03/24 PHP
PHP 命令行参数详解及应用
2011/05/18 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
javascript 原型继承介绍
2011/08/30 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
python元组操作实例解析
2014/09/23 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
python使用列表的最佳方案
2020/08/12 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
集体婚礼证婚词
2014/01/13 职场文书
小学家长会邀请函
2014/01/23 职场文书
前处理班长职位说明书
2014/03/01 职场文书
高二学生评语大全
2014/04/25 职场文书
餐饮投资计划书
2014/04/25 职场文书
艺术教育实施方案
2014/05/03 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
政审证明材料
2015/06/19 职场文书
小学中队委竞选稿
2015/11/20 职场文书
Vue h函数的使用详解
2022/02/18 Vue.js
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL