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 第三章章节总结的例子
Mar 23 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
Jan 27 Javascript
JavaScript中的分号插入机制详细介绍
Feb 11 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
Nov 24 Javascript
vue.js入门(3)——详解组件通信
Dec 02 Javascript
详解vue.js组件化开发实践
Dec 14 Javascript
基于bootstrap风格的弹框插件
Dec 28 Javascript
JavaScript判断浏览器和hack滚动条的写法
Jul 23 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
原生JS实现Ajax跨域请求flask响应内容
Oct 24 Javascript
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
Ant-design-vue Table组件customRow属性的使用说明
Oct 28 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
在Python中处理时间之clock()方法的使用
2015/05/22 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Mac 上切换Python多版本
2017/06/17 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
什么是Smart Navigation?
2016/07/03 面试题
气象学专业个人求职信
2014/03/15 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
广播节目策划方案
2014/05/23 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
安全守法证明
2015/06/23 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
mybatis 获取更新记录的id
2022/05/20 Java/Android