JavaScript 兼容性总结

获取滚动距离的兼容
//非chrome
document.documentElement.scrollTop   
document.documentElement.scrollLeft

//chrome
document.body.scrollTop
document.body.scrollLeft

//兼容写法:由于浏览器只支持其中一种,另一种为0,因此采用相加的方式
var scrolltop = document.documentElement.scrollTop + document.body.scrollTop

//更为稳妥的兼容写法:
var scrolltop = document.documentElement.scrollTop || document.body.scrollTop
getElementsByClassName()  // IE 低版本浏览器中无此方法
 

if(!document.getElementsByClassName){ //如果不存在该方法
    document.getElementsByClassName = function(classname){ //则手动创建
          var arr = []; 
          var all = document.getElementsByTagName("*");
          for(var i=0; i<all.length; i++){
               if(all[i].className.indexOf(classname+" ") != -1){
                    arr.push(all[i]); 
               }
          }
          return arr;
    } 
}
JS获取非行内样式
window.getComputedStyle(ele, null)      //非IE
ele.currentStyle      //IE

function getStyle(obj, attr) {
    if(obj.currentStyle) { //IE浏览器
        return obj.currentStyle[attr];
    } else {
        return getComputedStyle(obj,null)[attr];
    }
}

获取Event对象的兼容写法
obj.οnclick= function(evt){
     var e = evt || window.event;  // 常规浏览器 || IE
}
全世界最短IE6判定
if(!-[1,]) { //IE6       在IE6中[-1,].toString()为“1,”,‘-’会进行类型转换(转成数字类型),-"1,"  为NaN,所以返回!false
     
} else{ //非IE6   非IE6中[-1,].toString()为“1”,‘-’会进行类型转换(转成数字类型),-"1"  为-1,所以返回!true

}

全世界最无争议IE判定
if(window.VBArray){     //因为VB是微软发明的,其他浏览器无VBArray,至少可判定IE 6/7/8/9/10  

} else {

}

键盘码获取
document.οnkeypress=function(e){
	e = e || window.event;
	e.keyCode || e.which  // 常规浏览器 || IE
}

阻止事件传播(冒泡)
e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;  // 常规浏览器 || IE
注:这里不可使用 e.cancelBubble?e.cancelBubble = true : e.stopPropagation()
        因为 e.cancelBubble 是一个属性(而非方法),其默认值为 false 

event.target (事件委托时,触发事件源)
var srcObj = event.target || event.srcElement;

阻止默认行为
event.preventDefault(); //常规浏览器
event.returnValue = false; // IE
e.preventDefault ? e.preventDefault() : e.returnValue=false;

事件监听
obj.addEventListener("click",function(){},true);   //非IE

obj.attachEvent("onclick", function(){});      //IE

function addEvent(ele, eventType, func, isCapture){
     if(ele && ele.attachEvent){  //
          ele.attachEvent("on"+eventType, func);
     } else {
          ele.addEventListener(eventType, func, isCapture||false);
     }
}

//懒加载函数
function addEvent(obj, eventname, func, isCapture){
	if(window.VBArray){
		obj.attachEvent("on"+eventname, func);
		addEvent = function(obj, eventname, func){ .//第一次执行后替换原函数
			obj.attachEvent("on"+eventname, func);
		}
	} else {
		obj.addEventListener(eventname, func, !!isCapture);
		addEvent = function(obj, eventname, func, isCapture){
			obj.addEventListener(eventname, func, !!isCapture);
		}
	}
}

函数柯里化
var addEvent = (function(){
    if(window.attachEvent) {
        return function(obj, eventType, func){
            obj.attachEvent("on"+eventType, func);
        }
    } else {
        return function(obj, eventType, func,  isCapture) {
            obj.addEventListener(eventType, func, isCapture||false);
        }
    }
})();


删除某元素监听事件
(function removeEvent(){
		if(window.VBArray) {
			return function(ele, eventName, callback) {
				ele.detach("on" + eventName, callback);
			}
		}
		return function(ele,eventName,callback,isCapture){
			ele.removeEventListener(eventName,callback);
		}
	})();

request对象的兼容(ajax请求中使用)
new ActiveXObject("Msxml2.XMLHTTP")   //IE
var req = ActiveXObject?new ActiveXObject("Msxml2.XMLHTTP"):new XMLHttpRequest() ;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值