js兼容性统计及写法

众所周知,做程序最讨厌的就是解决兼容问题,你懂得,。目前就想到这些,后期想起来或者是遇到会继续统计。有错误也请大家指出。感谢。

【获取非行间样式】

getComputedStyle(obj,false).width
  chrome FF ie9+
  注:false:没用,只是为了兼容老版本的火狐;
obj.currentStyle.width
   ie7 8
兼容写法: (getComputedStyle(obj,false) || obj.currentStyle)[width]

//获取计算过后的样式
function getStyle(obj,sName){
    if(obj.currentStyle){
        return obj.currentStyle[sName];
    }else{
        return getComputedStyle(obj,false)[sName];
    }
}

//或者是
function getStyle(obj,sName){
    return (obj.currentStyle || getComputedStyle(obj,false))[sName]
}

【getByClass】

document.getElementsByClassName('red');
  兼容性 高级浏览器

function getByClass(oParent,sClass){
    if(oParent.getElementsByClassName){
        return oParent.getElementsByClassName(sClass);
    }else{
        var aElement=oParent.getElementsByTagName('*');
        var arr=[];
        for(var i=0; i<aElement.length; i++){
            var aClass=aElement[i].className.split(' ');
            for(var j=0; j<aClass.length; j++){
                if(aClass[j]==sClass){
                    arr.push(aElement[i]);
                }
            }
        }
        return arr
    }
}

【DOM】

获取元素
同级.nextElementSibling || 同级.nextSibling
同级.previousElementSibling || 同级.previousSibling
        兼容高级     兼容IE8-
父级.firstElementChild || 父级.firstChild
父级.lastElementChild || 父级.lastChild

【onmouseover和onmouseout】

这两个事件,当移入元素内的子级元素,会先默认出去,然后在进来
可以代替的事件
  onmouseenter和onmouseleave
  注:没有事件冒泡

【滚轮事件】

onmousewheel 滚轮事件
 兼容性 非火狐
 oEvent.wheelDelta
 120 向上 >0
 -120 向下 <0

DOMMouseScroll
 兼容性 火狐
 oEvent.detail
 -3 向上 <0
 3 向下 >0

注:你就记住火狐里面向下滚是正的

//添加滚轮事件***************************************
function addWheel(obj,fn){
    if(navigator.userAgent.toLowerCase().indexOf('firefox')!=-1){
        obj.addEventListener('DOMMouseScroll',wheel,false);            //火狐
    }else{
        obj.onmousewheel=wheel;                                        //非火狐
    }
    function wheel(ev){
        var bDown=true;
        var oEvent=ev || event;
        if(oEvent.wheelDelta){
            if(oEvent.wheelDelta>0){
                bDown=false;
            }else{
                bDown=true;
            }
        }else{
            //火狐
            if(oEvent.detail>0){
                bDown=true;
            }else{
                bDown=false;
            }
        }
        fn&&fn(bDown);
        oEvent.preventDefault&&oEvent.preventDefault(); //阻止默认事件(事件绑定中的默认事件) 只能用在高级浏览器中
        return false;                //阻止默认事件  
    }
}

【事件绑定】

addEventListener('不加on的事件名',函数名,false)
   高级浏览器
attachEvent('加on的事件名',函数名)
   IE系列

//添加事件
function addEvent(obj,sEv,fn){
    if(obj.addEventlistener){
        obj.addEventlistener(sEv,fn,false);
    }else{
        obj.attachEvent('on'+sEv,fn);
    }
}

解除绑定
obj.removeEventListener('不加on的事件名',函数名,false)
obj.detachEvent('加on的事件名',函数名)

//解除事件
function removeEvent(obj,sEv,fn){
    if(obj.removeEventlistener){
        obj.removeEventlistener(sEv,fn,false);
    }else{
        obj.detachEvent('on'+sEv,fn);
    }
}

【阻止默认事件】

return false 阻止默认事件 注:在事件绑定中失效
oEvent.preventDefault(); 事件绑定中阻止默认事件
注:单独用的话只能用在高级浏览器中

oEvent.preventDefault && oEvent.preventDefault();
return false

【事件委托】

作用:给未来的元素加事件 原理:利用的是事件冒泡
oEvent.srcElement
  兼容性 非火狐
oEvent.target
  兼容高级浏览器
tagName 标签名  注:标签名需要大写
兼容写法:oEvent.srcElement || oEvent.target

    document.body.onclick=function(ev){
                var oEvent=ev||event;
                //获取是事件源对象
                var oSrc=oEvent.srcElement || oEvent.target;
                //判断源对象的标签名
                if(oSrc.tagName=='DIV'){
                    alert('鹏哥')
                }
            }

【dom加载事件】

DOMContentLoaded
   兼容非IE
onreadystatechange 只是用来模拟
   兼容IE
document.readyState=='complete' 当加载成功的时候
   兼容性 全兼容

//DOM事件**********************************************
function ready(fn){
    if(document.addEventListener){
        document.addEventListener('DOMContentLoaded',fn,false)
    }else{
        document.onreadystatechange=function(){
            if(document.readyState=='complete'){
                fn();
            }
        };
    }
}

【滚动距离】

距离屏幕上方的滚动距离
  document.body.scrollTop
    兼容性:chrome
  document.documentElement.scrollTop
    兼容 非chrome
注:
  document.documentElement 获取html简写
  document.body 获取body的简写

//兼容写法:
document.documentElement.scrollTop || document.body.scrollTop

【事件对象】

事件对象:为了存储更加详细的事件信息
  event 非火狐
  ev 高级浏览器

//兼容写法:
var oEvent=ev || event

【eval和JSON.parse】

parse 标准 IE8+ 安全
eval 随意 ie6 不安全

//解析json*************************************************
function parseJson(str){
    try{
        return JSON.parse(str);
    }catch(e){
        return eval('('+str+')');
    }
}

【ajax】

XMLHttpRequest 对象
  兼容非IE
ActiveXObject 对象
  兼容IE

if(window.XMLHttpRequest){
    var oAjax=new XMLHttpRequest;
  }else{
    var oAjax=new ActiveXObject('Microsoft.XMLHTTP');
  }

//或者是try一下
try{
        var oAjax=new XMLHttpRequest;
    }catch(e){
        var oAjax=new ActiveXObject('Microsoft.XMLHTTP');
    }

【实时统计字数】

onkeydown
    键盘按下的时候,按下的东西,还没进文本框
onkeyup
    如果一直按下不统计
onkeyup=onkeydown
    一直按下的时候有一点卡顿
oninput
    IE9 删除有问题
    iE9-  没有此方法
onpropertychange
    IE系列
    IE9  删除有问题
oT1.oninput=oT1.onpropertychange
    IE9删除有问题
定时器
    没问题,性能不好

方案:IE9用定时器,其他用oT1.oninput=oT1.onpropertychange

【opacity】

css中透明度写法
  opacity:0-1
  filter:alpha(opacity:1-100); 解决IE

opacity:(0-1)
filter:alpha(opacity:0-100)

【固定定位】

fixed 固定定位
  不兼容IE6

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>前端开发-李鹏-两年经验-13522974525</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        div{
            width: 100px;
            height: 100px;
            background: red;
            position: absolute;
            right: 0;
            top: 0;
        }
    </style>
    <script>
        window.onload=window.onscroll=window.onresize=function(){
            var oDiv=document.getElementById('div1');
            //滚动距离
            var scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
            //可视区的高度
            var clientH=document.documentElement.clientHeight;
            //物体的高度
            var oDivH=oDiv.offsetHeight;
            //oDiv赋值  top
            oDiv.style.top=scrollTop+clientH-oDivH+'px';
        }
    </script>
</head>
<body style="height: 3000px">
    <div id="div1"></div>
</body>
</html>

上面是用浏览器滚动事件和浏览器拖拽事件写的,也可以用定时器

    /*window.onload=function(){
            var oDiv=document.getElementById('div1');
            setInterval(function(){
                //滚动距离
                var scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
                //可视区的高度
                var clientH=document.documentElement.clientHeight;
                //物体的高度
                var oDivH=oDiv.offsetHeight;
                //oDiv赋值  top
                oDiv.style.top=scrollTop+clientH-oDivH+'px';
            },10);

        }*/

【自定义属性】

高级浏览器会过滤自定义属性

目前想起的就这么多,毕竟两年了,遇到的也忘的差不多了。 以后工作在遇到再继续写。
以上结束。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容