工作中遇到的一些IE兼容性/JS问题收集整理

1. parseInt(“08”),parseInt("09") 输出0 (IE 8)

   使用parseInt("08",10)


2. 不支持indexOf (IE 8)

     if(!Array.indexOf){

       Array.prototype.indexOf = function(obj){

        for(var i=0; i<this.length; i++){

            if(this[i]==obj){

                return i;

            }

        }

        return -1;

    }

 }

3. toFixed 不四舍五入

function changeDecimal(num, bitNum) {

    var bb = num+""; 

    var dian = bb.indexOf('.'); 

    var result = ""; 

    if(dian == -1){ 

        result =  num.toFixed(bitNum); 

    }else{ 

        var cc = bb.substring(dian+1,bb.length); 

        if(cc.length >=bitNum){ 

            result =bb.substring(0,dian+bitNum+1)

            //result =  (Number(num.toFixed(bitNum))+0.01)*100000000000/100000000000;//js小数计算小数点后显示多位小数 

        }else{ 

            result =  num.toFixed(bitNum); 

        } 

    } 

    return result;

}

4.  左右滚动广告

window.setInterval(function () {

        var context = $("#broadcast_content");

        var left = parseFloat(context.css('left'));

        var length = context.text().length * 18*(-1);//18wei为font-size

        if (left > length) {

            context.css({ "left": left - 1 });

        } else {

            context.css({ "left":"450px"});//可见kuang框kuandu

        }

    }, 40);

5.随机抽奖

(function(){

function rd(n,m){

    var c = m-n+1;

    return Math.floor(Math.random() * c + n);

}

    setInterval(function getRandomInfo(){

  var ln ="赵,钱,孙,李,周,吴,郑,王,冯,陈,楮,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜,戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,俞,任,袁,柳,酆,鲍,史,唐,费,廉,岑,薛,雷,贺,倪,汤,滕,殷,罗,毕,郝,邬,安,常,乐,于,时,傅,皮,卞,齐,康,伍,余,元,卜,顾,孟,平,黄,和,穆,萧,尹,姚,邵,湛,汪,祁,毛,禹,狄,米,贝,明,臧,计,伏,成,戴,谈,宋,茅,庞,熊,纪,舒,屈,项,祝,董,梁,杜,阮,蓝,闽,席,季,麻,强,贾,路,娄,危,江,童,颜,郭,梅,盛,林,刁,锺,徐,丘,骆,高,夏,蔡,田,樊,胡,凌,霍,虞,万,支,柯,昝,管,卢,莫,经,房,裘,缪,干,解,应,宗,丁,宣,贲,邓,郁,单,杭,洪,包,诸,左,石,崔,吉,钮,龚,程,嵇,邢,滑,裴,陆,荣,翁,荀,羊,於,惠,甄,麹,家,封,芮,羿,储,靳,汲,邴,糜,松,井,段,富,巫,乌,焦,巴,弓,牧,隗,山,谷,车,侯,宓,蓬,全,郗,班,仰,秋,仲,伊,宫,宁,仇,栾,暴,甘,斜,厉,戎,祖,武,符,刘,景,詹,束,龙,叶,幸,司,韶,郜,黎,蓟,薄,印,宿,白,怀,蒲,邰,从,鄂,索,咸,籍,赖,卓,蔺,屠,蒙,池,乔,阴,郁,胥,能,苍,双,闻,莘,党,翟,谭,贡,劳,逄,姬,申,扶,堵,冉,宰,郦,雍,郤,璩,桑,桂,濮,牛,寿,通,边,扈,燕,冀,郏,浦,尚,农,温,别,庄,晏,柴,瞿,阎,充,慕,连,茹,习,宦,艾,鱼,容,向,古,易,慎,戈,廖,庾,终,暨,居,衡,步,都,耿,满,弘,匡,国,文,寇,广,禄,阙,东,欧,殳,沃,利,蔚,越,夔,隆,师,巩,厍,聂,晁,勾,敖,融,冷,訾,辛,阚,那,简,饶,空,曾,毋,沙,乜,养,鞠,须,丰,巢,关,蒯,相,查,后,荆,红,游,竺,权,逑,盖,益,桓,公,万俟,司马,上官,欧阳,夏侯,诸葛,闻人,东方,赫连,皇甫,尉迟,公羊,澹台,公冶,宗政,濮阳,淳于,单于,太叔,申屠,公孙,仲孙,轩辕,令狐,锺离,宇文,长孙,慕容,鲜于,闾丘,司徒,司空,丌官,司寇,仉,督,子车,颛孙,端木,巫马,公西,漆雕,乐正,壤驷,公良,拓拔,夹谷,宰父,谷梁,晋,楚,阎,法,汝,鄢,涂,钦,段干,百里,东郭,南门,呼延,归,海,羊舌,微生,岳,帅,缑,亢,况,后,有,琴,梁丘,左丘,东门,西门,商,牟,佘,佴,伯,赏,南宫,墨,哈,谯,笪,年,爱,阳,佟";

  var nameList = ln.split(',');

  var gender = ["先生","女士"];

  var multiple = rd(3,6);

  var result = nameList[rd(0,nameList.length-1)] + gender[rd(0,1)]+' 抽到了幸运奖'+multiple+'个神兜兜';

  console.log(result);

},1000)

}

)();

6.字符串和数字之间的隐式强制类型转换 (from 你不知道的javascript)

var a = "42";

var b = "0";

var c = 42;

var d = 0;

a + b; // "420"

c + d; // 42

var a = [1,2];

var b = [3,4];

a + b; // "1,23,4"

var a = 42;

var b = a + "";

b; // "42"

//a + ""(隐式)和前面的String(a)(显式)之间有一个细微的差别需要注意。根据

//ToPrimitive 抽象操作规则,a + "" 会对a 调用valueOf() 方法,然后通过ToString 抽象

//操作将返回值转换为字符串。而String(a) 则是直接调用ToString()。

//它们最后返回的都是字符串,但如果a 是对象而非数字结果可能会不一样!

var a = {

valueOf: function() { return 42; },

toString: function() { return 4; }

};

a + ""; // "42"

String( a ); // "4"

var a = [3];

var b = [1];

a - b; // 2

//为了执行减法运算,a 和b 都需要被转换为数字,它们首先被转换为字符串(通过

//强制类型转换 toString()),然后再转换为数字。

7.全局DOM 变量 (from 你不知道的javascript)

在创建带有id 属性

的DOM 元素时也会创建同名的全局变量。例如:

<div id="foo"></div>

以及:

if (typeof foo == "undefined") {

foo = 42; // 永远也不会运行

}

console.log( foo ); // HTML元素

8.滚动定位到指定位置

$("html,body").animate({scrollTop:$("#" + id).offset().top}, 800); //动态获取元素的高度在滚动至该高度

9.动态设置字体大小(rem)

   设置meta: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">

    var calculate_size = function() {

            // var BASE_FONT_SIZE = 100;

            var docEl = document.documentElement,

                clientWidth = document.querySelector(".container").clientWidth;

            if (!clientWidth) return;

            docEl.style.fontSize = (clientWidth / 10) + 'px';

        };

        // Abort if browser does not support addEventListener

        if (document.addEventListener) {

            var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';

            window.addEventListener(resizeEvt, calculate_size, false);

            document.addEventListener('DOMContentLoaded', calculate_size, false);

            calculate_size();

        }

10.格式化金额

//计算器

function fmoney(s, n) {

    n = n > 0 && n <= 20 ? n : 2;

    s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";

    var l = s.split(".")[0].split("").reverse(),

    r = s.split(".")[1];

    t = "";

    for (i = 0; i < l.length; i++) {

        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");

    }

    return t.split("").reverse().join("");

    //return t.split("").reverse().join("") + "." + r;

}

function GetMoney(moneyval) {

    var fomatmoney = "";

    var reg = new RegExp(",", "g"); //创建正则RegExp对象 

    moneyval = moneyval.replace(reg, "");

    if (moneyval.length > 9) {

        moneyval = parseInt(moneyval / 100) + "";

    }

    if (isNaN(moneyval) || moneyval == "") {

        document.getElementById("moneytxt").value = "";

        document.getElementById("money").innerHTML = "0";

        return;

    }

    if (isNaN(moneyval) || moneyval.length < 1) {

        if (parseFloat(moneyval) < 1) {

            alert("数字不能小于1!");

            return;

        }

        alert("请输入数字!");

        return;

    }

    if (moneyval === " ") {

        console.log("error");

        document.getElementById("moneytxt").value = "";

        return;

    }

    var fomatmoney = fmoney(moneyval, 0);

    document.getElementById("moneytxt").value = fomatmoney;

    document.getElementById("money").innerHTML = parseInt(moneyval * 5 / 1000) > 50000?50000:parseInt(moneyval * 5 / 1000);

    //if (isNaN(moneyval) || moneyval.length < 4) {

    //    document.getElementById("money").innerHTML = parseInt(0);

    //}

}

11.判断iframe是否加载成功:

  iframe.onload = function(){

var that = $(this)[0];

try{

that.contentDocument;

}

catch(err){

//TODO

}

}

12.Knockout 使用jquery直接赋值不被监听

   使用change方法: $("#id").val("testValue").change()

13.点击其他区域关闭某区域

$(document).mouseup(function(e){

  var _con = $(' 目标区域 ');  // 设置目标区域

  if(!_con.is(e.target) && _con.has(e.target).length === 0){ // Mark 1

    some code...  // 功能代码

  }

});

/* Mark 1 的原理:

判断点击事件发生在区域外的条件是:

1. 点击事件的对象不是目标区域本身

2. 事件对象同时也不是目标区域的子元素

*/

14.图片转blob,base64 (React Croper)

<AvatarSelector

                                    src={this.props.profileSettings.photo}

                                    onChange={this.onAvatarSelectorChange}

                                    onChangeIllegalType={this.onChangeIllegalType}

                                    inputProps={{name: 'wort-wort-wort'}}

                                    isLoading={this.props.profileSettings.isLoading}

                                    size = "150px"

                                />

<div onClick = {this.chooseImg}>

            <ReactCrop

                    src={this.state.src}

                    crop={this.state.crop}

                    onImageLoaded={this.onImageLoaded}

                    onComplete={this.onCropComplete}

                    onChange={this.onCropChange}

                />

</div>

onCropChange = (crop:any) => {

        this.setState({crop:crop});

};

onImageLoaded = (image:any):void => {

        this.imageRef = image;

};

onCropComplete = async (crop:any, pixelCrop:any) => {

        if (crop.width && crop.height) {

          const croppedImageUrl = await this.getCroppedImg(

            this.imageRef,

            pixelCrop,

            'newFile.jpeg',

          );

          this.setState({croppedImageUrl:croppedImageUrl });

        }

      };

chooseImg = (e:any)=>{

        e.preventDefault();

        let now = new Date().getTime();

        if( now - this.touchTime < 500){

            this.touchTime = now;

            this.handlePhotoChange();

        }else{

            this.touchTime = now;

        }

        // this.resetValidation();

    }

getCroppedImg(image:any, pixelCrop:any, fileName:any) {

        const canvas = document.createElement('canvas');

        canvas.width = pixelCrop.width;

        canvas.height = pixelCrop.height;

        const ctx = canvas.getContext('2d');

        (ctx as any).drawImage(

          image,

          pixelCrop.x,

          pixelCrop.y,

          pixelCrop.width,

          pixelCrop.height,

          0,

          0,

          pixelCrop.width,

          pixelCrop.height,

        );

        return new Promise((resolve, reject) => {

          canvas.toBlob((blob:any) => {

            blob.name = fileName;

            this.imageBlob = blob;

            window.URL.revokeObjectURL(this.fileUrl);

            this.fileUrl = window.URL.createObjectURL(blob);

            //Convert to base64

            var dataURL = canvas.toDataURL('image/png');

            this.base64Url = dataURL;

            resolve(this.base64Url);

          }, 'image/jpeg');

        });

      }

15.倒计时

function show_timese(t1, now, target) {//目标时间,现在时间,目标元素

    var temp;

    if (t1 - now > 0) {

        temp = t1 - now;

    } else {

        temp = 1;

    }

    // 天

    var int_day = Math.floor(temp / 86400000)

    temp -= int_day * 86400000;

    // 时

    var int_hour = Math.floor(temp / 3600000)

    temp -= int_hour * 3600000;

    // 分

    var int_minute = Math.floor(temp / 60000)

    temp -= int_minute * 60000;

    // 秒

    var int_second = Math.floor(temp / 1000)

    }

    //调用

    setInterval(function() {

        show_timese(time1, time_now, target);

    }, 60000)

16.js动态加载

var JsLoader = function(sUrl, fCallback) {

    var _script = document.createElement('script');

    _script.setAttribute('type', 'text/javascript');

    _script.setAttribute('src', sUrl);

    document.getElementsByTagName('head')[0].appendChild(_script);

    if (_script.addEventListener) {

        _script.onload = function() {

            _script.parentNode.removeChild(_script);

            fCallback && fCallback();

        }

    } else if (_script.readyState) {

        _script.onreadystatechange = function() {

            if (_script.readyState == 'loaded' || _script.readyState == 'complete') {

                _script.onreadystatechange = null;

                _script.parentNode.removeChild(_script);

                fCallback && fCallback();

            }

        }

    } else {

        _script.parentNode.removeChild(_script);

    }

};

17.获取特定url链接属性

function getQueryString(name) {

                var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");

                var r = window.location.search.substr(1).match(reg);

                if (r != null) return unescape(r[2]);

                return null;

      }


18. svg在ie下做背景图得时候background-position失效

检查svg是否设置了width,height及合适得viewbox

19.Git 倒出带历史记录的repo

gitremote add origin  XXXXXXXXX

gitpush -u origin –all

在本地创建分支dev并切换到该分支

git checkout -b dev(本地分支名称) origin/dev(远程分支名称)


20.chrome设置跨域

新建一个chrome快捷方式,右击属性,快捷方式,目标,添加 --disable-web-security --user-data-dir="C:/blabla"

("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:/blabla")

21.Print

      1) new window

        let html = document.querySelector(".print-area").innerHTML;

        let myWindow=window.open('','','width='+(window.screen.availWidth-10)+',height='+(window.screen.availHeight-30)+',top=0,left=0,toolbars=no,scrollbars=no,status=no');

        myWindow.document.write(html);

        myWindow.document.close();

        myWindow.focus();

        myWindow.print();

        myWindow.close();

   1) Iframe

           var iframe=document.getElementById("print-iframe") as any;

            if(!iframe){  

                    // var el = document.getElementById("printcontent");

                    iframe = document.createElement('IFRAME');

                    var doc = null;

                    iframe.setAttribute("id", "print-iframe");

                    iframe.setAttribute('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;');

                    document.body.appendChild(iframe);

                    doc = iframe.contentWindow.document;

                    //这里可以自定义样式

                    //doc.write("<LINK rel="stylesheet" type="text/css" href="css/print.css">");

                    doc.write('<div>' + document.documentElement.innerHTML + '</div>');

                    doc.close();

                    iframe.contentWindow.focus();            

            }

            iframe.contentWindow.print();

            if (navigator.userAgent.indexOf("MSIE") > 0){

                 document.body.removeChild(iframe);

            }

22. Email outlook 圆角

<!--[if mso]>

<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{marketplaceUrl}}" style="border-radius:8px;v-text-anchor:middle;width:166px;height:45px;" arcsize="10%" strokecolor="#ffffff" strokeweight ="0px" fillcolor="#002A3E"> <v:stroke dashstyle="solid" /> <w:anchorlock/> <center style="color:#ffffff;font-family:Arial,Helvetica,sans-serif;font-size:11pt;font-weight:bold;">Go to Marketplace</center> </v:roundrect>

<![endif]-->

<!--[if !mso]> <!---->

<table style="background-color:#002A3E;border-radius:5px;border:none;display:inline-block;font-size:16px;font-weight:normal;letter-spacing:0px;line-height:16px;padding:11px 12px 11px 12px;font-weight:600"> <tr> <td> <a style="color:#FFF;text-decoration:none" href={{marketplaceUrl}} target="_blank">Go to Marketplace</a> </td> </tr> </table>

<!-- <![endif]-->

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

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,421评论 1 45
  • 1. javascript的typeof返回哪些数据类型. 答案:string,boolean,number,un...
    梦里梦不到的梦_b5c8阅读 678评论 0 0
  • 北京2018年4月1日上午,NBA常规赛勇士客战国王的比赛中,发生了令人痛心不已的一幕。比赛进行到第三节还有41...
    Curry_宇阅读 1,172评论 1 1
  • 兼容性问题: 一、CSS兼容性 1.felx布局在iOS8上有问题。解决:加-webkit前缀 2.ie6、7和遨...
    af13e05a9b9a阅读 810评论 0 0
  • 前端面试题汇总 1、函数的创建方式有哪几种?举一个闭包的的例子,举一个曾经封装过的函数,简单阐述一下原型链的使用,...
    我家媳妇蠢蠢哒阅读 607评论 0 0