在使用js的过程中,往往会发现关于IE浏览器的兼容问题,当然微软现在自己也打算抛弃IE,推出了edge浏览器,对于前端来说是个好消息.

但IE的用户占比仍然不容小觑,因此这里整理下常见的几个兼容问题附上解决方案,以免不时之需.

1.非行内样式的获取

  IE浏览器:element.currentstyle+attr

  正常浏览器(chrome,FF):getComputedStyle(element,false)+attr

这两类浏览器以下都简称为IE和正常

接下来封装一个函数,方便调用(兼容所有浏览器)

function getStyle(ele,attr){
var a = "";
if(ele.currentStyle){      //IE
a = ele.currentStyle[attr];
}else{
a = getComputedStyle(ele,false)[attr]; //正常
}

2.获取事件对象

     IE  : window.event

  正常 : 给事件传参

obox.onclick=function(eve){
var e=eve||window.event;
console.log(e)
}

3.阻止事件冒泡

 事件冒泡:当触发元素的某个事件时,它会先触发自己的对应事件,然后依次向上触发所有父级的相同事件;上一父级没有相同事件,继续向上触发
需要注意的是onmouseenter和onmouseleave不支持事件冒泡
   IE    : event.cancelBubble=true
  正常 : event.stopPropagation()
function stopBubble(e){
if(e.stopPropagation){
e.stopPropagation();    //正常
}else{
e.cancelBubble = true; //IE
}
}

4.事件委托

事件委托:将多个相同元素的相同事件,添加给页面上现存的共同的父元素,利用事件冒泡,配合事件源,找到真正点击的元素

  IE     : event.srcElement
  正常 : event.target
function tar(t){
var t = e.target || e.srcElement;}

5.添加事件绑定方式

事件绑定方式有两种:赋值式和监听式

(1)赋值式: (DOM 0级事件绑定)
 它比较常用,没兼容问题
  例子:obox.onclick=function(){}
(2)监听式: (DOM 2级事件绑定) 
  IE     : element.attachEvent("on"+type,cb)
  正常 : element.addEventListener(type,cb)
function addEvent(ele,type,cb){
if(ele.addEventListener){
ele.addEventListener(type,cb)   //监听式:正常
}else if(ele.attachEvent){
ele.attachEvent("on"+type,cb) //监听式:IE
}else{
ele["on"+type] = cb;      //赋值式
}
}

6.删除事件绑定方式

同样的,事件绑定方式的删除对应

(1)删除赋值式事件绑定
  例子:obox.onclick=null
(2)删除监听式事件绑定:
  IE     : element.detachEvent("on"+type,cb)
  正常 : element.removeEventListener(type,cb)
function removeEvent(ele,type,cb){
if(ele.removeEventListener){
ele.removeEventListener(type,cb)  //监听式:正常的删除
}else if(ele.detachEvent){
ele.detachEvent("on"+type,cb)   //监听式:IE的删除
}else{
ele["on"+type] = null;       //赋值式的删除
}
}

7.键盘事件的键值获取

IE     : event.which

正常 : event.keycode

function code(eve){
var e=eve||window.event; //先获取事件
var code=e.keyCode||e.which; //再获取键值
}

8.阻止默认事件

 IE     : event.returnValue = false
 正常 : event.preventDefault()
 function stopDefault(e){
if(e.preventDefault){
e.preventDefault() //正常
}else{
e.returnValue = false; //IE
}
}

9.鼠标的页面位置pageX,pageY

 function getPage(e) {
var pageX = e.pageX || e.clientX + getScroll().scrollLeft;
var pageY = e.pageY || e.clientY + getScroll().scrollTop;
return {
pageX: pageX,
pageY: pageY
}
}

10.滚轮移动距离scrollTop

function getScroll() {
if (document.documentElement.scrollTop) {
return document.documentElement.scrollTop;
} else if (document.body.scrollTop) {
return document.body.scrollTop;
}

11.严格模式的开启

;(function(){"use strict"})();

碰到新的兼容问题会继续更新,欢迎讨论

js中的兼容问题汇总的更多相关文章

  1. js中的DOM操作汇总

    一.DOM创建 DOM节点(Node)通常对应于一个标签,一个文本,或者一个HTML属性.DOM节点有一个nodeType属性用来表示当前元素的类型,它是一个整数: Element,元素 Attrib ...

  2. JS中的兼容问题总结

    今天总结总结在JS里面遇到的兼容性问题 1.获取滚动距离的兼容性问题: document.documentElement.scrollTop  ||  document.body.scrollTop ...

  3. JS中浏览器兼容问题

    body的子节点IE 火狐 显示3个  其他显示7个 float浮动中的兼容 link 操作外联的兼容

  4. js中浏览器兼容startsWith 、endsWith 函数

    在做js开发的时候用到了startsWith函数时,发现各个浏览器不兼容问题,因为对开发来说,chrome浏览器最好用,就一直在chrome浏览器中使用这两个函数没有任何问题,但在ie浏览器访问就直接 ...

  5. js中typeof的用法汇总[转载]

    http://www.jb51.net/article/43187.htm JavaScript中的typeof其实非常复杂,它可以用来做很多事情,但同时也有很多怪异的表现.本文列举出了它的多个用法, ...

  6. 记录js中的兼容问题及解决办法

    1.获取非行内样式的兼容问题: 2.获取事件对象的兼容问题: 3.事件冒泡的兼容: 4.keyCode的兼容问题: 5.处理默认事件的兼容问题: 6.事件的绑定兼容问题:

  7. js中typeof的用法汇总

  8. js中getBoundingClientRect的作用及兼容方案

    js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...

  9. 分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容

    问题的产生 在写JS的过程中,为了调试我们常常会写很多 console.log.console.info.console.group.console.warn.console.error代码来查看JS ...

随机推荐

  1. hashCode和equals的区别

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 有面试官会问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写has ...

  2. Python pip包管理器安装第三方库超时解决方案

    一.国内镜像安装 使用方法:pip install --index 镜像网站 第三方库名 二.镜像网站 http://pypi.douban.com/simple/ 豆瓣 http://mirrors ...

  3. Activiti6系列(2)- 运行和编译

    前言 Activiti6.0在官网已经无法下载了,需要在Github上下载. 下载地址: https://github.com/Activiti/Activiti/releases/download/ ...

  4. 图片格式:gif / png / pg / webp 介绍

    本文引自:https://www.cnblogs.com/changyangzhe/articles/5718285.html GIF介绍 GIF 意为Graphics Interchange for ...

  5. Caddy 源码全解析

    caddy源码全解析 Caddy 源码全解析 Preface Caddy 是 Go 语言构建的轻量配置化服务器.同时代码结构由于 Go 语言的轻便简洁,比较易读,推荐学弟学妹学习 Go 的时候也去查看 ...

  6. 使用sar进行性能分析

    sar可用于监控Linux系统性能,帮助我们分析性能瓶颈.sar工具的使用方式为”sar [选项] intervar [count]”,其中interval为统计信息采样时间,count为采样次数. ...

  7. html5标签整理

    html元素 基础标签 <!DOCTYPE> 定义文档类型(e.g  <!DOCTYPE  html>) <html>定义一个HTML文档</html> ...

  8. Java请求Http

    一.工具类,直接粘贴调用即可 package cn.com.service.httpReq; import java.io.BufferedReader;import java.io.IOExcept ...

  9. Sqlserver 锁表查询代码记录

    --方法1WITH CTE_SID ( BSID, SID, sql_handle ) AS ( SELECT blocking_session_id , session_id , sql_handl ...

  10. 深入理解Mysql索引底层数据结构与算法

    索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构对比 二叉树 左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据. 如果col2是索引,查找索引为89的行元素,那么只需要查 ...