JavaScript 兼容性总结

来源:互联网 发布:数据录入员待遇好么 编辑:程序博客网 时间:2024/06/02 06:50
获取滚动距离的兼容
//非chromedocument.documentElement.scrollTop   document.documentElement.scrollLeft//chromedocument.body.scrollTopdocument.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)      //非IEele.currentStyle      //IEfunction getStyle(obj, attr) {    if(obj.currentStyle) { //IE浏览器        return obj.currentStyle[attr];    } else {        return getComputedStyle(obj,null)[attr];    }}

获取Event对象的兼容写法
obj.onclick= 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.onkeypress=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; // IEe.preventDefault ? e.preventDefault() : e.returnValue=false;

事件监听
obj.addEventListener("click",function(){},true);   //非IEobj.attachEvent("onclick", function(){});      //IEfunction 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")   //IEvar req = ActiveXObject?new ActiveXObject("Msxml2.XMLHTTP"):new XMLHttpRequest() ;


原创粉丝点击