js兼容性

常见js兼容性

1,JSON.stringify()

在ie7下报错,JSON未定义,解决办法引入json2.js

var a={a:1,b:2};
var b=JSON.stringify(a);
alert(b);

2,getElementsByClassName() 和 obj.setAttribute();

getElementsByClassName(),ie8及其以下都不支持这个方法

setAttribute(),ie都不支持此方法

解决ie不支持getElementsByClassName()方法:

var claro=document.getElementsByClassName("claro");
claro[0].setAttribute("name","xiaoming");

3. js绑定事件兼容

var  el=document.getElementById("id");

//ie
if(el.attachEvent){
   el.attachEvent('onclick',fn);
//非ie
}else if(el.addEventListener){

//false事件句柄在冒泡阶段执行,true事件句柄在捕获阶段执行
el.addEventListener("click",fn,false); }else{ el['onclick']=fn; }

4.ajax兼容

var  xhr;

if(window.ActiveObjectX){//ie
   xhr=new window.ActiveObjectX('Microsoft.XMLHTTP');
}else{//非ie
   xhr=new XMLHttpRequest();
}

5.原生js获取元素的样式: 

style只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的。
currentStyle可以弥补style的不足,但是只适用于IE
getComputedStyle同currentStyle作用相同,但是适用于FF、opera、safari、chrome
var oDiv=document.getElementById('div1');
getStyle(oDiv,'width');
function getStyle(obj,attr){
    if(obj.currentStyle){
        return obj.currentStyle[attr];
    }else{
        return getComputedStyle(obj,false)[attr];
    }
}

 6.Object.prototype.toString判断数据类型:

    Object.prototype.toString.apply(null) 结果:"[object Null]",ie6/7/8 返回 "[object Object]"

    Object.prototype.toString.apply(undefined) 结果:"[object Undefined]",ie6/7/8 返回 "[object Object]"

 7.当前事件的源

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

    //根据事件的冒泡原理,找到需要变更class 的LI元素
    while(target.tagName!='LI' || target.tagName=='BODY'){
       target=target.parentNode;
    } 

   //给当前元素加上class big
   target.className += ' big';

8.常见兼容代码:

function addEventListener(target,type,handler){
     if(target.addEventLister){
         target.addEventLister(type,handler);
     }else if(target.attachEvent){
         target.attachEvent('on'+type,function(){
            handler.call(target);
         })
     }else{
        target['on'+type]=handler;

     }
}

function removeEventLister(target,type,handler){
    if(target.removeEventListener){
       target.removeEventListener(type,handler);
    }else if(target.detachEvent){
       target.detachEvent('on'+type,handler);
    }else{
       target['on'+type]=null;
    }
}

//获取目标对象

function getTarget(e){
    var e=window.event||e,target;
    if(e.target){
       target=e.target;
    }else{
       target=e.srcElement;
    }
    return target;
}

//停止冒泡

function stopPropagation(e){
    var e=window.event||e;
    if(e.stopPropagation){
      e.stopPropagation();
    }else{
      e.cancelBubble=true;
    }
}

//阻止默认行为

function preventDefault(e){
    var e=window.event||e;
    if(e.preventDefault){
      e.preventDefault();
    }else{
      e.returnValue=false;
    }
}
原文地址:https://www.cnblogs.com/xiaotaiyang/p/5611128.html