1. 程式人生 > >JS常見的11種兼容

JS常見的11種兼容

arc 超鏈接 ets src bsp [] ren 常見 compute

一、scrollTop/Left的兼容

document.documentElement.scrollTop || document.body.scrollTop;

document.documentElement.scrollLeft || document.body.scrollLeft;

二、getElementsByClassName兼容(IE9以下)

function byClassName(obj,className){
  if(obj.getElementsByClassName){
    return obj.getElementsByClassName(className);
  }
else{     var arr = []; //放置獲取到的相同class名的對象集     var eles = obj.getElementsByTagName(‘*‘); //獲取所有的標簽     //遍歷所有的標簽     for(var i = 0,len = eles.length;i < len;i ++){       //判斷對象的類名是否我指定的類名       if(eles[i].className == className){         arr.push(eles[i]); //放到數組中       }     }     return arr;   } }

三、獲取class屬性值的兼容

var attr = oDiv.getAttribute(‘class‘) == null ? oDiv.getAttribute(‘className‘) : oDiv.getAttribute(‘class‘);

四、獲取非行內樣式

function getStyle(obj,attr){
    return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,true)[attr];
}

五、獲取事件對象的兼容

var e = evt || window.event;

六、獲取鼠標按鍵編碼值的兼容

function getButton(evt){
    //獲取事件對象的兼容
    var e = evt || window.event;
    if(evt){ //標準瀏覽器
        return e.button;
    }else if(window.event){ //IE
        switch(e.button){
            case 1 : return 0;
            case 4 : return 1;
            case 2 : return 2;
        }
    }
}

七、獲取鍵盤按鍵編碼值的兼容

evt.charCode || evt.keyCode || evt.which

八、阻止事件冒泡的兼容

e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;

九、阻止超鏈接的默認行為

evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;

十、添加/移除事件監聽

function addEventListener(obj,event,fn,boo){
    if(obj.addEventListener){
        obj.addEventListener(event,fn,boo);
    }else{
        obj.attachEvent(‘on‘ + event,fn);
    }
}


function removeEventListener(obj,event,fn,boo){
    if(obj.removeEventListener){
        obj.removeEventListener(event,fn,boo);
    }else{
        obj.detachEvent(‘on‘ + event,fn);
    }
}

十一、獲取事件源的兼容

var target = e.target || e.srcElement;

JS常見的11種兼容