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
jQuery实现跟随鼠标运动图层效果的方法
Feb 02 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
浅析JavaScript 调试方法和技巧
Oct 22 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
老生常谈JavaScript 函数表达式
Sep 01 Javascript
JavaScript优化以及前段开发小技巧
Feb 02 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
May 03 Javascript
JS基于for语句编写的九九乘法表示例
Jan 04 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
vue中created和mounted的区别浅析
Aug 13 Javascript
Node.js API详解之 os模块用法实例分析
May 06 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
Smarty变量调节器失效的解决办法
2014/08/20 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
使用python加密自己的密码
2015/08/04 Python
django 常用orm操作详解
2017/09/13 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
python怎么对数字进行过滤
2020/07/05 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
C#面试常见问题
2013/02/25 面试题
工程业务员工作职责
2013/12/07 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
班级心理活动总结
2014/07/04 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python