欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
前言
 
        没想到吧,这年头还有人用IE5呢,但是没办法,有些毕竟老的机构开发的系统比较早,那时候写的是IE5的内核,到现在需要增加一些小功能,所以需要兼容IE5。好了,废话不多说,下面把我用的能够兼容IE5的插件以及踩过的坑给大家总结一下。
 
1.确认好需求
 
        一定一定一定要确认好客户使用的是什么版本内核的IE,我这边客户说的是兼容到IE11,说的是浏览器的版本为IE11,并不是内核版本,虽说IE浏览器的版本为11,但是内核版本还是IE5。所以一定要确认好客户使用的IE内核的版本。
 
2.jQuery版本
 
        jQuery版本我测试过的,能够兼容到IE5的版本一定要是2.0以下的,并且1.0版本的jQuery有一个版本也有问题,就是1.10.1。这个版本的jq在IE5上会报错,但是1.10.2版本不会了,应该是修复了吧。
 
3.语法
 
切记!!IE5不支持ES5和ES6语法以及CSS3新特性,常见容易踩坑的有:
 
变量的声明方式;低版本ie不支持let和const声明变量方式
 
不支持箭头函数,匿名函数只能用传统的写法;
 
不支持三目运算符;
 
数组不支持forEach、map等方法;
 
不支持for...in和for...of循环;
 
不支持JSON对象;
 
写好之后最好检查一下有没有console.log()没有注释掉,我遇到过线上console报错的;
 
对象的最后一个属性不要加逗号;
 
Object.keys方法和Object.values方法不支持;
 
IE5不支持绝对定位属性;
 
不支持nth选择器;
 
不支持flex布局;
 
不支持子代选择器(>);
 
不支持最大最小宽度和高度;
 
不支持透明度、圆角属性、过渡动画、transition等等;
 
4.ajax请求
 
        对于低版本的IE,请求千万不要使用jq封装好的ajax,jq封装好的ajax请求只适用于IE高版本,应该是IE8及以上,使用在IE低版本会出现拒绝访问的问题。
 
        当时遇到这个问题的时候,相信大家和我一样,自己手写一个原生的请求;然后我写了,但是!还是有问题,原生的请求IE也会出现兼容问题。找了大量的文献(其实是去某度),然后写出了IE原生请求的兼容写法:
 
    var Xmlhttp = null;
 
    if (window.XMLHttpRequest) { // code for IE7, Firefox, Opera, etc.
 
        Xmlhttp = new XMLHttpRequest();
 
    } else if (window.ActiveXObject) { // code for IE6, IE5
 
        Xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 
    }
 
    if (Xmlhttp != null) {
 
        Xmlhttp.onreadystatechange = function () {
 
            if (Xmlhttp.readyState == 4) { // 4 = "loaded"
 
                if (Xmlhttp.status == 200) { // 200 = "OK"
 
                    //这里写成功时的操作
 
                    console.log("后端返回给的数据", Xmlhttp.responseText); //JSON字符串
 
                } else {
 
                    alert("Problem retrieving XML data:" + Xmlhttp.statusText);
 
                }
 
            }
 
        };
 
        Xmlhttp.open("GET", 请求地址, true);
 
        Xmlhttp.send(null);
 
    } else {
 
        alert("Your browser does not support XMLHTTP.");
 
    }
 
这时候文件在本地文件夹直接打开请求是成功的,但是!!发布到线上时,请求就会报错,然后我又查阅了大量的文献(某度),发现是跨域的问题,然后在线上配置nginx,使用反向代理就可以啦——
 
有细心的小伙伴发现了,我上面请求写的后端返回的数据是Xmlhttp.responseText,返回的是一个JSON字符串,但是我在上面写道IE5是没有JSON对象的,那该这么将后端给我的转为JSON对象嘞,既然IE5不支持JSON对象,那我们就自己写一个,哈哈,自己写是不可能自己写的,在网上找到了写好的,下载地址:https://github.com/douglascrockford/JSON-js 下载好之后引入在项目头部引入一下就OK了。
 
5.下拉框插件
 
        IE自带的输入框,下拉框都不怎么好看,输入框还好,可以自己改一下样式,但是下拉框就很头疼,所以下拉框我选择使用jq美化插件,插件名称:jQuery Selectric,可以切换喝多风格,最重要的,它能够兼容IE5!!我是下载的zip压缩包,然后引入的静态文件,具体的使用方法大家可以参照他这边的官方文档。另附上使用效果:
 
6.多层级下拉框插件
 
        由于项目需求,难免会遇到多层级选择的问题,我这边用的是 comboTreePlugin,虽然这个功能能够兼容IE5,但是一些样式不能够兼容,所以运到到我这边的项目的时候,我做了一点样式的改动。并且搜索不能够使用,后面我自己把这个搜索框拿掉了,其实这个多层级下拉框兼容IE5一般,但是由于项目周期问题,所以就用了这个,虽然有点问题,但是用在我这边的项目里足够了,如果大家遇到更好的兼容插件欢迎在评论区分享呀,另附上使用效果:
 
7.日期选择器插件
 
        因为项目中需要用到日期选择器,但是这个亲妈养的IE5对于input属性type不支持date,所以我就找一个特别强的日期选择器插件:日期选择器,也有点小瑕疵,第一呢就是他只能选择到年月日,不支持时分秒,所以我自己在后面接了一个input框,让用户自己输入具体时间,做个校验就行了。还有就是css文件他这边写的是在js里面自己引入的,所以要注意一下路径问题;另附上使用效果:
 
8.分页插件
 
        分页插件我用的是:jQuery分页插件pagination,什么都好,就是样式需要自己画,但是也还好,就几个方块,功能好用才是王道,也是能够兼容IE5的,另附上使用效果:
 
9.弹窗
 
        关于弹窗嘞,我找了半个小时左右没找到符合我要求的插件,所以我自己手写了一个,附上代码和效果图,别忘记引入jQuery了哟!如果有家人们找到类似的能够兼容到IE5的弹窗插件,评论区交流一下呀
 
HTML:
 
<p onclick="openPopup()">打开弹窗</p> 
 
<div class="myPopup">
 
        <img src="./static/myPopupBg.png" alt="" class="myPopupBg">
 
        <div class="myPopupContent">
 
            <div class="myPopupContentTitle">
 
                <h3 class="cl"><span class="fl">弹窗</span> 
 
                <img src="./static/close.png" alt="" class="myPopupClose fr" onclick="closePopup()"></h3>
 
            </div>
 
            <div class="myPopupContentBody">
 
                <div class="myPopupContentBodyContentType cl">
 
                    需要展现的内容
 
                </div>
 
            </div>
 
            <div class="myPopupContentFooter">
 
                <span onclick="closePopup()">确&emsp;定</span>
 
            </div>
 
        </div>
 
    </div>
 
CSS:
 
<style>
 
.myPopup {
 
    position: absolute;
 
    _position: absolute;
 
    top: 0;
 
    bottom: 0;
 
    right: 0;
 
    left: 0;
 
    margin: auto;
 
    width: 100%;
 
    height: 101%;
 
    overflow: hidden;
 
    display: none;
 
    text-align: center;
 
}
 
.myPopupContent {
 
    background-color: #fff;
 
    padding: 15px;
 
    width: 700px;
 
    margin: auto;
 
    margin-top: 100px;
 
}
 
.myPopup .myPopupBg {
 
    position: absolute;
 
    width: 100%;
 
    height: 100%;
 
    left: 0;
 
    top: 0;
 
    z-index: -1;
 
}
 
.myPopupContentTitle h3 {
 
    font-size: 16px;
 
    line-height: 18px;
 
}
 
.myPopupContentTitle {
 
    margin-bottom: 30px;
 
}
 
.myPopupContentTitle span {
 
    font-weight: bold;
 
    color: #409eff;
 
}
 
.myPopupClose {
 
    height: 12px;
 
    width: 12px;
 
    cursor: pointer;
 
}
 
.myPopupContentFooter {
 
    text-align: right;
 
    margin-top: 30px;
 
}
 
.myPopupContentFooter span {
 
    height: 28px;
 
    width: 80px;
 
    text-align: center;
 
    line-height: 28px;
 
    padding: 0 10px;
 
    background: #3383FF;
 
    box-shadow: 0px 4px 15px 2px rgba(51, 131, 255, 0.2);
 
    border-radius: 5px;
 
    color: #fff;
 
    font-size: 12px;
 
    cursor: pointer;
 
}
 
.myPopupContentBody {
 
    text-align: left;
 
    height: 300px;
 
    overflow-y: auto;
 
    padding: 0 10px;
 
}
 
.fr {
 
    float: right;
 
}
 
.fl {
 
    float: left;
 
}
 
.cl:after {
 
    content: "";
 
    display: block;
 
    clear: both;
 
    height: 0;
 
    overflow: hidden;
 
    visibility: hidden;
 
}
 
.cl {
 
    zoom: 1;
 
}
 
</style>
 
JS:
 
  function openPopup() {
 
        $(".myPopup").css("top", document.body.scrollTop + 'px')
 
        $("body").attr("style", "overflow:hidden")
 
        $(".myPopup").show();
 
  }
 
 function closePopup() {
 
        $("body").attr("style", "overflow:visible");
 
        $(".myPopup").hide();
 
  }
 
用到的图片背景图以及关闭按钮,由于IE5不支持透明度属性,所以自己用ps做了一个半透明的png:
 
效果图:

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64302.shtml