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 相关文章推荐
用Javscript实现表单复选框的全选功能
May 25 Javascript
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
Mar 27 Javascript
javascript字符串替换及字符串分割示例代码
Dec 12 Javascript
js简单实现交换Li的值
May 22 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
七个不允许错过的jQuery小技巧
Dec 21 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
微信小程序tabBar 返回tabBar不刷新页面
Jul 25 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 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图片加中文水印实现代码分享
2012/10/31 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
js模拟类继承小例子
2010/07/17 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
基于JavaScript实现验证码功能
2017/04/01 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
python使用thrift教程的方法示例
2019/03/21 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
《灯光》教学反思
2014/02/08 职场文书
保密工作实施方案
2014/02/24 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
学校捐书倡议书
2015/04/27 职场文书
村党组织公开承诺书
2015/04/30 职场文书
资金申请报告范文
2015/05/14 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
2015年暑期见闻
2015/07/14 职场文书
七年级作文之雪景
2019/11/18 职场文书
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫