js中的兼容问题汇总
在使用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.阻止事件冒泡
function stopBubble(e){
            if(e.stopPropagation){
                e.stopPropagation();    //正常
            }else{
                e.cancelBubble = true;    //IE
            }
        } 
4.事件委托
事件委托:将多个相同元素的相同事件,添加给页面上现存的共同的父元素,利用事件冒泡,配合事件源,找到真正点击的元素
function tar(t){
    var t = e.target || e.srcElement;}
5.添加事件绑定方式
事件绑定方式有两种:赋值式和监听式
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.删除事件绑定方式
同样的,事件绑定方式的删除对应
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.阻止默认事件
 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中的兼容问题汇总的更多相关文章
- js中的DOM操作汇总
		一.DOM创建 DOM节点(Node)通常对应于一个标签,一个文本,或者一个HTML属性.DOM节点有一个nodeType属性用来表示当前元素的类型,它是一个整数: Element,元素 Attrib ... 
- JS中的兼容问题总结
		今天总结总结在JS里面遇到的兼容性问题 1.获取滚动距离的兼容性问题: document.documentElement.scrollTop || document.body.scrollTop ... 
- JS中浏览器兼容问题
		body的子节点IE 火狐 显示3个 其他显示7个 float浮动中的兼容 link 操作外联的兼容 
- js中浏览器兼容startsWith 、endsWith 函数
		在做js开发的时候用到了startsWith函数时,发现各个浏览器不兼容问题,因为对开发来说,chrome浏览器最好用,就一直在chrome浏览器中使用这两个函数没有任何问题,但在ie浏览器访问就直接 ... 
- js中typeof的用法汇总[转载]
		http://www.jb51.net/article/43187.htm JavaScript中的typeof其实非常复杂,它可以用来做很多事情,但同时也有很多怪异的表现.本文列举出了它的多个用法, ... 
- 记录js中的兼容问题及解决办法
		1.获取非行内样式的兼容问题: 2.获取事件对象的兼容问题: 3.事件冒泡的兼容: 4.keyCode的兼容问题: 5.处理默认事件的兼容问题: 6.事件的绑定兼容问题: 
- js中typeof的用法汇总
- js中getBoundingClientRect的作用及兼容方案
		js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ... 
- 分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容
		问题的产生 在写JS的过程中,为了调试我们常常会写很多 console.log.console.info.console.group.console.warn.console.error代码来查看JS ... 
随机推荐
- Java性能权威指南读书笔记--之一
			JIT(即时编译) 解释型代码:程序可移植,相同的代码在任何有适当解释器的机器上,都能运行,但是速度慢. 编译型代码:速度快,电视不同CPU平台的代码无法兼容. java则是使用java的编译器先将其 ... 
- dubbo文档笔记
			配置覆盖关系 以 timeout 为例,显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似: 方法级优先,接口级次之,全局配置再次之. 如果级别一样,则消费 ... 
- 使用Arthas 获取Spring ApplicationContext还原问题现场
			## 背景 最近来了个实习僧小弟,安排他实现对目标网站 连通性检测的小功能,简单讲就是将下边的shell 脚本换成Java 代码来实现 ``` 1#!/bin/bash 2URL="http ... 
- MobaXterm:远程终端登录软件封神选手
			提到SSH.Telnet等远程终端登录,我相信很多人想到的都是PuTTY PuTTY通常用于Windows,但实际上可以多平台运行,因此不表达为"Windows下的远程终端登录" ... 
- Spark 系列(四)—— RDD常用算子详解
			一.Transformation spark 常用的 Transformation 算子如下表: Transformation 算子 Meaning(含义) map(func) 对原 RDD 中每个元 ... 
- AWS Aurora数据库 Multi-Master 小测
			AWS Aurora Mysql终于推出了Multi-Master,直面硬刚Oracle RAC.在多一份数据库产品选择的小兴奋之余,我们也看看新推出的Multi-Master的特点(包括优缺点). ... 
- opencv图像直方图均衡化及其原理
			直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均 ... 
- Java——反射:运行时的类信息
			RTTI的使用 如果不知道某个对象的确切类型,RTTI会告诉我们,但是有一个限制:这个类型在编译时必须已知,这样才能使用RTTI识别它,并利用这些信息做一些有用的事情. 2.什么情况下需要反射 假设 ... 
- 7.18 collection time random os sys 序列化 subprocess 等模块
			collection模块 namedtuple 具名元组(重要) 应用场景1 # 具名元组 # 想表示坐标点x为1 y为2 z为5的坐标 from collections import namedtu ... 
- 聊一聊 SpringBoot 自动配置的原理
			解析思路 我们建立好一个SpringBoot的工程后,我们将从启动类,SpringBootApplication开始进行探究. 开始解析 首先我们建立一个 Springboot的工程.找到启动类,我们 ... 
