//1.滚动条到顶端的距离
  var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

//2.滚动条到左边的距离
  var scrollLeft = document.documentElement.scrollLeft || document.body.ScrollLeft;

//3.byClassName的兼容(通过class获取指定的对象)
  function byClassName(obj,className){
    //判断是否支持byClassName方法
    if(obj.getElementsByClassName){
      //直接使用
      return obj.getElementsByClassName(className);
    }else{//不支持
      //获取所有的标签
      var eles = obj.getElementsByTagName("*");
      var arr = [];
      //获取每一个标签对象
      for(var i = 0,len = eles.length;i < len;i++){
        //判断每一个对象是否具有指定的className
        if(eles[i].className === className){
          arr.push(eles[i]);
        }
      }
      return arr;
    }
  }

//4.获取元素对象中class属性值的兼容
  function getClassValue(obj){
    return obj.getAttribute('class') ? obj.getAttribute('class') : obj.getAttribute('className');
  }

//5.获取非行内样式的兼容
  function getStyle(obj,attr){
    return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,1)[attr];
  }

//6.获取事件对象的兼容
  evt = evt || window.event;

//7.获取鼠标编码值得兼容
  function getButton(evt){
    var e = evt || window.event;
    if(evt){
      return e.button;
    }else if(window.event){
      switch(e.button){
        case 1 : return 0;
        case 4 : return 1;
        case 2 : return 2;
      }
    }
  }

//8.阻止事件冒泡的兼容
  event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;

//9.获取键盘编码值onkeypress的兼容
  event.keyCode || event.charCode || event.which;

//10.阻止超链接的默认行为的兼容
  event.preventDefault ? event.preventDefault() : event.returnValue = false;

//11.添加事件监听的兼容
  function addEventListener(obj,event,fn,bool){
    if(obj.addEventListener){
      obj.addEventListener(event,fn,bool);
    }else if(obj.attachEvent){
      obj.attachEvent('on' + event,fn);
    }
  }

//12.移除事件监听器的兼容
  function removeEventListener(obj,event,fn, bool){
    if(obj.removeEventListener){
      obj.removeEventListener(event,fn,bool);
    }else if(obj.detachEvent){
      obj.detachEvent('on' + event,fn);
    }
  }

//13.获取事件源的兼容
  var target = event.target || event.srcElement;

//14.创建Ajax(XMLHttpRequest)对象兼容

  var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');

JS兼容问题的更多相关文章

  1. io.js - 兼容 NPM 平台的 Node.js 新分支

    io.js(JavaScript I/O)是兼容 NPM 平台的 Node.js 新分支,由 Node.js 的核心开发者在 Node.js 的基础上,引入更多的 ES6 特性,它的目的是提供更快的和 ...

  2. 初学canvas,遇到width和height显示问题和用excanvas.js兼容IE问题

    /*-----------------------ITEYE 祈祷幸福博客原创,转载请注明.-------------------*/ 第一次认真写技术博客文~~~若有不严谨的地方,望指正. 今天是第 ...

  3. css js 兼容问题

    js  兼容问题 1. document.form.item 问题问题:代码中存在 document.formName.item("itemName") 这样的语句,不能在FF下运 ...

  4. js兼容火狐显示上传图片预览效果

    js兼容火狐显示上传图片预览效果[谷歌也适用] <!doctype html> <html> <head> <meta content="text/ ...

  5. 拖放排序插件Sortable.js 兼容好及功能全个人觉得比dragula.js 好的多

    经测试,Sortable.js 兼容好和使用方便都是比较不错的,特别手机端使用很棒 介绍 Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)下载地址:https: ...

  6. JS兼容各个浏览器的本地图片上传即时预览效果

    JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...

  7. [转]FireFox与IE 下js兼容触发click事件的代码

    本文转自:http://www.jb51.net/article/16549.htm FireFox与IE 下js兼容触发click事件 ,对于需要兼容这两者的朋友,就需要参考下下面的代码了<a ...

  8. js兼容注意事项--仅供参考

    做BS开发就难免会用到javascript,而每个浏览器对javascript的支持有不同.这就需要我们程序员去兼容他们,不然有些浏览器就无法运行我们的代码.就会造来客户的投诉,如果让BoSS知道了, ...

  9. JS兼容IE浏览器的方法

    背景 系统需要兼容蛋疼的IE6... 解决方案 *{ 兼容IE6-8 }* <!--[if lt IE 9]> <script src="@{'/public/mng/ja ...

  10. JS兼容getElementsByClassName

    getElementsByClassName是通过class来获取DOM,但是IE8及以下不能兼容.这里做了一下兼容性. HTML: <div class="pox"> ...

随机推荐

  1. 最小生成树(Prim算法)

    Java实现Prim算法 package com.java; import java.util.*; /** * 普里姆算法—Prim算法 * 算法思路:将图中所有的顶点分为两类:树顶点(已被选入生成 ...

  2. Mysql 获取表设计查询语句

    SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE 是否 ...

  3. 宋宝华:Docker 最初的2小时(Docker从入门到入门)【转】

    最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料.本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,就是先知道怎么玩,有个感性认识,再深入学 ...

  4. 什么是POE交换机?

    POE交换机和普通交换机的区别有: 1.POE交换机不但可以实现普通交换机的数据传输功能还能同时对网络终端进行供电 .普通的交换机主要是交换数据的功能,并没有具备供电的功能. 2.现在的网络高清摄像机 ...

  5. Chinese word segment based on character representation learning 论文笔记

    论文名和编号 摘要/引言 相关背景和工作 论文方法/模型 实验(数据集)及 分析(一些具体数据) 未来工作/不足 是否有源码 问题 原因 解决思路 优势 基于表示学习的中文分词 编号:1001-908 ...

  6. PHP生成PDF并转换成图片爬过的坑

    需求描述:根据订单通过模板合同生成新的PDF合同通过e签宝签约后转为图片给用户下载. 需求整理: 1.如何生成PDF文件:使用TCPDF扩展生成.思考: ⑴为了方便将模板中的固定占位符替换为订单中的内 ...

  7. SQLServer数据库差异备份

    差异备份 (differential backup)定义 一种数据备份,基于完整数据库或部分数据库或一组数据文件或文件组(差异基准)的最新完整备份,并且仅包含自确定差异基准以来发生更改的数据. 使用S ...

  8. LeetCode算法题-Minimum Moves to Equal Array Elements(Java实现)

    这是悦乐书的第233次更新,第246篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第100题(顺位题号是453).给定大小为n的非空整数数组,找到使所有数组元素相等所需的 ...

  9. 我的第一个python web开发框架(27)——定制ORM(三)

    在上一章中,我们已经创建好ORM的基类了,接下来要做的就是将基类的常用方法一一实现. 首先我们来看看之前项目中,最常见的获取指定主键的记录实体 @get('/api/product/<id:in ...

  10. Angular的项目结构

    前面我们已经在我们想要的位置顺利的创建了Angular项目,现在我们就来看一下项目的结构吧. 下面使我们项目的整体结构,包括node的模板.src资源文件以及配置文件等. 下面是根目录文件夹内的文件用 ...