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真的不难-回顾一下基础知识
Jan 15 Javascript
JavaScript中的方法调用详细介绍
Dec 30 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
javascript计时器编写过程与实现方法
Feb 29 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
JS实现简单表格排序操作示例
Oct 07 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
Mar 12 Javascript
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
浅析Vue实例以及生命周期
Aug 14 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
Mar 10 Javascript
vue解决跨域问题(推荐)
Nov 10 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 图片文件上传实现代码
2010/12/29 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
javascript继承之为什么要继承
2012/11/10 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
详解python中requirements.txt的一切
2017/03/03 Python
Python 转义字符详细介绍
2017/03/21 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
蔻驰法国官网:COACH法国
2018/11/14 全球购物
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
五年级上册复习计划
2015/01/19 职场文书
上课迟到检讨书
2015/05/06 职场文书
迎新生欢迎词2015
2015/07/16 职场文书