浏览器兼容性-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= ...
随机推荐
- getAttribute、setAttribute、removeAttribute
1.函数语法 elementNode.attributes:属性返回包含被选节点属性的 NamedNodeMap. elementNode.getAttribute(name):方法通过名称获取属性的 ...
- Python 小爬虫流程总结
接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...
- 显示或隐藏div
代码来源于博客,如有侵权,请联系我! ASP.NET中TextBox控件设置ReadOnly="true"H或Enabled=false后台取不到值 当TextBox设置了Read ...
- Splinter学习——不仅仅是自动化测试哦
前两天,想抢购一个小米MIX,结果,一开始抢就没有了.于是想,作为程序猿,总得有点特殊手段吧,比如说一个小脚本.最近在学习python,百度了一下,发现了Splinter这个强大的东东!用了不到两小时 ...
- Tomcat7.0+的JNDI问题
上次搭建spring+springmvc+mybatis框架时用的第三方连接池jar包,但是部署到tomcat中后访问没有问题,但是启动时报了个JNDI的错,我没用JNDI你给我报什么,fuck!把错 ...
- Launch Mode
1.standard standard的加载模式不管是否已经存在Activity都会再次创建一个Acitivy,同时将新创建的Activity加入栈顶. 所以在这种加载模式下需要多次返回才能退出. 2 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- 何为HDFS?
该文来自百度百科,自我收藏. Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...
- 小白请教几个关于Java虚拟机内存分配策略的问题
最近在看周志明所著的<深入理解Java虚拟机>,有几个问题不太明白,希望对虚拟机有研究的哥们儿帮我解答一下.先说一下我进行试验的环境: 操作系统:Mac OS X 10.11.6 EI C ...
- 与你相遇好幸运,制作自己的Yeoman Generator
使用别人写好的生成器: npm install -g yonpm install -g generator-angularyo angular 如何自己制作符合自己心仪的生成器呢: https://g ...