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 相关文章推荐
一个简单的Node.js异步操作管理器分享
Apr 29 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
Apr 07 Javascript
javascript获取select标签选中的值
Jun 04 Javascript
浅谈jQuery中事情的动态绑定
Feb 12 Javascript
ECMAScript6--解构
Mar 30 Javascript
解决vue.js this.$router.push无效的问题
Sep 03 Javascript
jQuery动态生成的元素绑定事件操作实例分析
May 04 jQuery
js实现图片上传即时显示效果
Sep 30 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 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中使用TCPDF生成PDF文档实例
2014/07/01 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
Jquery下的26个实用小技巧(jQuery tips, tricks & solutions)
2010/03/01 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python去除字符串两端空格的方法
2015/05/21 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
PyTorch中的Variable变量详解
2020/01/07 Python
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
异步传递消息系统的作用
2016/05/01 面试题
实习介绍信模板
2015/01/30 职场文书
会议室管理制度范本
2015/08/06 职场文书
关于开学的感想
2015/08/10 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android