浏览器兼容性-JS篇
总结一下平时遇到的浏览器兼容性问题,本篇关于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篇的更多相关文章
- 浏览器兼容性之Css篇
本文与上一篇随笔<浏览器兼容性之Javascript篇>有一定关联,下来我会继续不断总结,旨在解决浏览器兼容性,对遇到类似问题的同仁有所帮助,如有更多解决浏览器兼容性的案例还望大家分享一起 ...
- 浏览器兼容性小整理和一些js小问题(后面会继续更新)
最近在啃jQuery的源码,估计会啃到很多浏览器兼容性的问题,所以整理一下 1,IE下的内存泄露. 在IE中不在DOM树中的独立节点有javascript变量引用它的时候不会被回收. 解决:手动将该j ...
- tab.js分享及浏览器兼容性问题汇总
在 样式布局分享-基于frozen.js的移动OA 文章中,用了到第三方组件 tab.js(带菜单的横屏滑动插件),其兼容性很差,进行优化后,已兼容全平台(且支持IE6+). tab.js GitHu ...
- 从零开始的全栈工程师——html篇1.8(知识点补充与浏览器兼容性)
知识点补充 一.浏览器的兼容问题(关于浏览器的兼容问题 有很多大佬已经解释的很清楚了 这个得自己百度去多花点时间去了解 这里咱们只说一下前面的漏点) 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题 ...
- 常见浏览器兼容性问题与解决方案css篇
浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大. 碰到频率:100% 解决方案:CSS里 ...
- 常见的浏览器兼容性问题与解决方案——CSS篇
1.不同的浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin和padding差异较大. 碰到频率:100% 解决方案:初始化CSS的默认样式,*{ ...
- CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- IE浏览器兼容性模式
最近支持公司的一个内部业务管理系统,系统是基于jQuery来实现:用了2年的MVVM框架的我转向这个完全使用jQuery框架来开发的系统,真是相当不爽(相信用过MVVM框架的跟我是相同的感受):更为憋 ...
- 阻止pc端浏览器缩放js代码
阻止pc端浏览器缩放js代码 众所周知:移动端页面禁止用户缩放界面只需加上<meta name="viewport" content="user-scalable= ...
随机推荐
- Python~字典
if not isinstance(x, (int, float)): raise TypeError('bad operand type') range() raw_input(‘birth’) ...
- 源码安装php
php安装扩展源yum install epel-releaseyum updateyum install libmcrypt libmcrypt-devel mcrypt mhash -yyum i ...
- HTML5 的一些小的整理吧
主要的就是一些HTML 5 API 的使用 也是借鉴别人的博客 ,和MDN(中文部分的还是能看的懂) 上面的一些东西 具体的代码在 有道云笔记里面也有. 先把总得列出来 1.Canvas绘图 学完这个 ...
- C语言 关于内存动态分配问题
全局变量:分配到 内存的静态区. 局部变量(非静态):分配到 内存的动态区.在存储区中称为栈(stack) 临时数据(C允许内存动态分配区域):存放在自由空间区,称为堆区(heap) 内存动态分配 得 ...
- python之I/O操作
IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开 ...
- LeetCode 206 Reverse a singly linked list.
Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...
- 表空间统计报告 Tablespace growth Report
SQL> select TS# from v$tablespace where name='ABC' ; TS# ---------- 6 set serverout on set verify ...
- 使用Word 2013发布cnblogs随笔
博客园支持Word或者OneNote一键发布文章. 获取cnblogs的URL地址,类似http://rpc.cnblogs.com/metaweblog/your_name 打开word中的管理账户 ...
- 【转】Asp.net关闭弹出窗口刷新父窗口
通常情况下,关闭窗口时不需要对父窗口做任何操作,但如果子窗口是某一对象的修改画面,这时,当关闭子窗体时就需要对父窗口刷新,刷新可以通过三种方式来实现:1,采用window.opener.locatio ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
有时候,当我们使用"mysql"."mysqladmin"."mysqldump"等命令管理数据库时,服务器抛出类似如下错误: 一.错误现场 ...