总结一下平时遇到的浏览器兼容性问题,本篇关于JS。

1.事件绑定

兼容写法:

 function add(obj,event){
if (obj.addEventListener) {
obj.addEventListener(event,fn,fase);
}else{
obj.attachEvent("on"+event,fn);
}
}

小结:addEventListener()兼容firefox、chrome、safari、opera、IE9+

   attachEvent()兼容IE7,8

2.event事件对象

兼容写法

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

小结:e兼容火狐浏览器,window.event兼容非火狐

3.获取scrollTop

兼容写法:

var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;

小结:document.documentElement.scrollTop兼容非chrome

document.body.scrollTop兼容chrome

4.阻止浏览器默认事件

兼容写法:

 function prevent(event){
if (event.preventDefault) {
event.preventDefault();
}else{
event.returnValue = false;
}
}

小结:eventPreventDefault()不兼容IE6-8

    event.returnValue = false;兼容IE

5.阻止冒泡

兼容写法:

 function stop(event){
if (event.stopPropagation) {
event.stopPropagation();
}else{
event.cancleBubble = true;
}
}

小结:event.stopPropagation()不兼容IE6-8

    event.cancleBubble = true兼容IE

6.滚轮

兼容写法:

 function mouseWheel(obj,fn){
var ff = window.navigator.userAgent.indexOf('Firefox');
if (ff!=-1) {
      obj.addEventListener('DOMMouseScroll',wheel,false);//兼容火狐
}else{
obj.onmousewheel = wheel;//非火狐
}
}

小结:obj.addEventListener('DOMMouseScroll',wheel,false);//兼容火狐

    obj.onmousewheel = wheel;//非火狐

7.获取classname

 兼容写法:

 function byClass(parent,className){
//通过className查找元素的兼容问题
//如果现代浏览器有这个写法
if (parent.getElementsByClassName) {
return parent.getElementsByClassName(className);//返回直接查找到的元素集
}else{
//IE浏览器
var arr = [];//用于存储最终查找到的元素
var els = parent.getElementsByTagName('*');//获取查找范围下的所有元素
var reg = new RegExp('\\b'+className+'\\b','g');
for (var i=0;i<els.length;i++) {
if (reg.test(els[i].className)) {//判断els.className与reg是否匹配,若匹配返回true
arr.push(els[i]);
            reg.lastIndex = 0;                 
}
}
return arr;//返回查找到的元素
}
}

补充,对于为何要加上reg.lastIndex = 0;(13行下面那一句代码),原因如下:

若不加这句代码,有连续的两个类名匹配时,只会匹配第一个,则第二个不会。究起原因就是RegExp对象的lastIndex属性:该属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。若使用了‘g’全局修饰符,在执行了test方法后,lastIndex就会将匹配到的字符串的位置记录下来作为下一次匹配的起始位置。若是下一次匹配没有成功,则lastIndex置为0。

若不加'g'全局修饰符,则可以把这句代码省略掉。请点击查看demo

小结:IE浏览器不支持getElementsByClassName()所以只能自己写一个方法来获取class

后续还会补充,有错误指出还请指出。

浏览器兼容性-JS篇的更多相关文章

  1. 浏览器兼容性之Css篇

    本文与上一篇随笔<浏览器兼容性之Javascript篇>有一定关联,下来我会继续不断总结,旨在解决浏览器兼容性,对遇到类似问题的同仁有所帮助,如有更多解决浏览器兼容性的案例还望大家分享一起 ...

  2. 浏览器兼容性小整理和一些js小问题(后面会继续更新)

    最近在啃jQuery的源码,估计会啃到很多浏览器兼容性的问题,所以整理一下 1,IE下的内存泄露. 在IE中不在DOM树中的独立节点有javascript变量引用它的时候不会被回收. 解决:手动将该j ...

  3. tab.js分享及浏览器兼容性问题汇总

    在 样式布局分享-基于frozen.js的移动OA 文章中,用了到第三方组件 tab.js(带菜单的横屏滑动插件),其兼容性很差,进行优化后,已兼容全平台(且支持IE6+). tab.js GitHu ...

  4. 从零开始的全栈工程师——html篇1.8(知识点补充与浏览器兼容性)

    知识点补充 一.浏览器的兼容问题(关于浏览器的兼容问题 有很多大佬已经解释的很清楚了 这个得自己百度去多花点时间去了解 这里咱们只说一下前面的漏点) 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题 ...

  5. 常见浏览器兼容性问题与解决方案css篇

    浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大. 碰到频率:100% 解决方案:CSS里    ...

  6. 常见的浏览器兼容性问题与解决方案——CSS篇

    1.不同的浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin和padding差异较大. 碰到频率:100% 解决方案:初始化CSS的默认样式,*{ ...

  7. CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  8. IE浏览器兼容性模式

    最近支持公司的一个内部业务管理系统,系统是基于jQuery来实现:用了2年的MVVM框架的我转向这个完全使用jQuery框架来开发的系统,真是相当不爽(相信用过MVVM框架的跟我是相同的感受):更为憋 ...

  9. 阻止pc端浏览器缩放js代码

    阻止pc端浏览器缩放js代码 众所周知:移动端页面禁止用户缩放界面只需加上<meta name="viewport" content="user-scalable= ...

随机推荐

  1. Python3.5在Windows 7下连接ORACLE数据库

    1.首先需要安装好oracle数据库,本机适用plsql连接数据库正常,记录下数据库名称 2.安装cx_oracle模块 pip install cx_Oracle 3.python中引入模块 imp ...

  2. URAL 1827 Indigenous Wars(排序、乱搞)

    题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...

  3. 安装JBOSS

    下载JBOSS 无需安装 修改环境变量: JBOSS_HOME=/root/jboss-as-7.1.1.Finalexport JBOSS_HOME 进入bin下 ./standalone.sh - ...

  4. tp框架实现验证码

    今天来看一个小插件. tp框架是怎么实现验证码的. 又到了我们千篇一律的时候了,首先呢,先做一个用来显示的html界面名为:zhuce.html <!DOCTYPE html PUBLIC &q ...

  5. 如何在一台服务器上安装两个mysql或者更多

    如何在一台服务器上安装两个mysql 1       前言 上篇写了在一台机器上源码编译安装一个mysql,那么如何在一台机器上源码编译安装两个mysql或者更多呢? 2       环境 mysql ...

  6. JQuery EasyUI DataGrid列表所见所得随意导出excel

    1.抽取DataGrid列表数据 function ExportNormal(strXlsName, exportGrid, postUrl, hiddenColumns) { /// <sum ...

  7. GRUB、MBR名词解释

    GRUB:是一个来自GUN项目的多操作系统启动程序,是多启动规范的实现,他允许用户在计算机内同时拥有多个操作系统,并在计算机启动时选择希望的操作系统.GRUB可用于选择系统分区上的不同内核,也可用于向 ...

  8. EChart数据的异步加载和更新

    ECharts是国内开发一款图标插件,在网页中我们经常要用到图标显示,直接引用十分方便. 直接到ECharts主页调用插件 <!DOCTYPE html> <html style=& ...

  9. Centos7学习之静态IP设置方法介绍

      1.编辑 ifcfg-eth0 文件,vim 最小化安装时没有被安装,需要自行安装不描述. # vim /etc/sysconfig/network-scripts/ifcfg-eth0 2.修改 ...

  10. 如何在vim里删除空行?

    删除空行,进入底行模式 :g/^$/d ^代表首列 $代表尾列 d代表删除 g代表全局替换