前端踩过的坑

-----------------------------------------JS-------------------------------------------

1、checkbox全选和反选时,用jquery的attr代码会出错:

$(":checkbox").attr("checked","checked");
$(":checkbox").removeAttr("checked");

原因:checked属性即分为attribute->checked,和property->true,false。

     对于一个checkbox,若未定义checked="checked",alert($.attr("checked")) 的结果是undefined。若已定义则结果是checked。attribute并不随着checkbox的状态变化而改变。

     使用prop($.attr("checked"))的话输出则分别为false和true。property则随其变化而变化。

所以要改为

  $(":checkbox").prop("checked",false);
  $(":checkbox").prop("checked",true);

参考:jQuery中attr()和prop()在修改checked属性时的区别

2、js判断IE版本

function IETester(userAgent){
    var UA =  userAgent || navigator.userAgent;
    if(/msie/i.test(UA)){
        return UA.match(/msie (d+.d+)/i)[1];
    }else if(~UA.toLowerCase().indexOf('trident') && ~UA.indexOf('rv')){
        return UA.match(/rv:(d+.d+)/)[1];
    }
    return false;
}
IETester();//不传参数返回当前IE版本,如果不是IE内核浏览器,返回false   如果为IE11  返回"11.0"
IETester('Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko');//传userAgent字符串,用来判断其他IE浏览器的版本,该示例返回11.0


判断是否为IE
if (!!window.ActiveXObject || "ActiveXObject" in window) is IE;

  else not IE;

3、在js中重新载入js文件

function is_load_js(path)
{
     var e; if(e=document.getElementById("dusk")) e.parentNode.removeChild(e);
     var script= document.createElement("SCRIPT"); script.defer = true;
     script.type="text/javascript"; script.src=path; script.id="dusk";
     document.getElementsByTagName("HEAD")[0].appendChild(script);
}

 4、angular 获取$scope对象

var appElement = document.querySelector('[ng-controller=UserContractCtrl]');
var $scope = angular.element(appElement).scope();

5、JavaScript高级程序设计第三版给的检测浏览器 引擎 操作系统的js代码

var client = function(){

    //rendering engines
    var engine = {            
        ie: 0,
        gecko: 0,
        webkit: 0,
        khtml: 0,
        opera: 0,

        //complete version
        ver: null  
    };
    
    //browsers
    var browser = {
        
        //browsers
        ie: 0,
        firefox: 0,
        safari: 0,
        konq: 0,
        opera: 0,
        chrome: 0,

        //specific version
        ver: null
    };

    
    //platform/device/OS
    var system = {
        win: false,
        mac: false,
        x11: false,
        
        //mobile devices
        iphone: false,
        ipod: false,
        ipad: false,
        ios: false,
        android: false,
        nokiaN: false,
        winMobile: false,
        
        //game systems
        wii: false,
        ps: false 
    };    

    //detect rendering engines/browsers
    var ua = navigator.userAgent;    
    if (window.opera){
        engine.ver = browser.ver = window.opera.version();
        engine.opera = browser.opera = parseFloat(engine.ver);
    } else if (/AppleWebKit/(S+)/.test(ua)){
        engine.ver = RegExp["$1"];
        engine.webkit = parseFloat(engine.ver);
        
        //figure out if it's Chrome or Safari
        if (/Chrome/(S+)/.test(ua)){
            browser.ver = RegExp["$1"];
            browser.chrome = parseFloat(browser.ver);
        } else if (/Version/(S+)/.test(ua)){
            browser.ver = RegExp["$1"];
            browser.safari = parseFloat(browser.ver);
        } else {
            //approximate version
            var safariVersion = 1;
            if (engine.webkit < 100){
                safariVersion = 1;
            } else if (engine.webkit < 312){
                safariVersion = 1.2;
            } else if (engine.webkit < 412){
                safariVersion = 1.3;
            } else {
                safariVersion = 2;
            }   
            
            browser.safari = browser.ver = safariVersion;        
        }
    } else if (/KHTML/(S+)/.test(ua) || /Konqueror/([^;]+)/.test(ua)){
        engine.ver = browser.ver = RegExp["$1"];
        engine.khtml = browser.konq = parseFloat(engine.ver);
    } else if (/rv:([^)]+)) Gecko/d{8}/.test(ua)){    
        engine.ver = RegExp["$1"];
        engine.gecko = parseFloat(engine.ver);
        
        //determine if it's Firefox
        if (/Firefox/(S+)/.test(ua)){
            browser.ver = RegExp["$1"];
            browser.firefox = parseFloat(browser.ver);
        }
    } else if (/MSIE ([^;]+)/.test(ua)){    
        engine.ver = browser.ver = RegExp["$1"];
        engine.ie = browser.ie = parseFloat(engine.ver);
    }
    
    //detect browsers
    browser.ie = engine.ie;
    browser.opera = engine.opera;
    

    //detect platform
    var p = navigator.platform;
    system.win = p.indexOf("Win") == 0;
    system.mac = p.indexOf("Mac") == 0;
    system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);

    //detect windows operating systems
    if (system.win){
        if (/Win(?:dows )?([^do]{2})s?(d+.d+)?/.test(ua)){
            if (RegExp["$1"] == "NT"){
                switch(RegExp["$2"]){
                    case "5.0":
                        system.win = "2000";
                        break;
                    case "5.1":
                        system.win = "XP";
                        break;
                    case "6.0":
                        system.win = "Vista";
                        break;
                    case "6.1":
                        system.win = "7";
                        break;
                    default:
                        system.win = "NT";
                        break;                
                }                            
            } else if (RegExp["$1"] == "9x"){
                system.win = "ME";
            } else {
                system.win = RegExp["$1"];
            }
        }
    }
    
    //mobile devices
    system.iphone = ua.indexOf("iPhone") > -1;
    system.ipod = ua.indexOf("iPod") > -1;
    system.ipad = ua.indexOf("iPad") > -1;
    system.nokiaN = ua.indexOf("NokiaN") > -1;
    
    //windows mobile
    if (system.win == "CE"){
        system.winMobile = system.win;
    } else if (system.win == "Ph"){
        if(/Windows Phone OS (d+.d+)/.test(ua)){;
            system.win = "Phone";
            system.winMobile = parseFloat(RegExp["$1"]);
        }
    }
    
    
    //determine iOS version
    if (system.mac && ua.indexOf("Mobile") > -1){
        if (/CPU (?:iPhone )?OS (d+_d+)/.test(ua)){
            system.ios = parseFloat(RegExp.$1.replace("_", "."));
        } else {
            system.ios = 2;  //can't really detect - so guess
        }
    }
    
    //determine Android version
    if (/Android (d+.d+)/.test(ua)){
        system.android = parseFloat(RegExp.$1);
    }
    
    //gaming systems
    system.wii = ua.indexOf("Wii") > -1;
    system.ps = /playstation/i.test(ua);
    
    //return it
    return {
        engine:     engine,
        browser:    browser,
        system:     system        
    };

}();

 6、根据给定的条件在原有的数组上,得到所需要的新数组

var a = [-1, -1, 1, 2, -2, -2, -3, -3, 3, -3];
function f(s, e) {
    var ret = [];
    for (var i in s) { // 根据原有的数组长度进行循环
        ret.push(e(s[i]));
    }
    return ret;
}
f(a, function(n) {
    return n > 0 ? n : 0
}); // 传输一个匿名函数作为逻辑判断

7、比原生type或typeof更详细的类型监测方法

function type(p) {
    /function.(w*)()/.test(p.constructor); //通过其构造函数来获取对应的类型。
    return RegExp.$1;
}

8、对象或数组的深拷贝,用于解决对象引用时值一改全改的问题

var copyObject = function(obj) {
    var result = {};
    for (var x in obj) {
        result[x] = typeof obj === "object" ? copyObject(obj[x]) : obj[x]
        //如果拷贝的值仍然是一个对象,那么重复执行当前方法。
    }  
    return result;
}

9、通过正则表达式来获取Cookie的值

function getCookie(name) {
    if (name && RegExp("(^| )" + name + "=([^;]*)(;|$)").exec(document.cookie)) return RegExp.$2;
    // (^| ) 不匹配第一个空格。
    // ([^;]*) 只匹配除了;号之外的所有字符。
    // (;|$) 匹配以;号或$为结尾的字符。
}

10、通过移位运算来替代”parseInt”

~~3.14 = > 3;
// ~~ 取整。~取当前数值的反码,~~表示再次取反,也就是得到当前自身(说明,JS中的“位”运算会将数值自动转换为整数)

11、将数值转换为16进制的字符串(常用于表示色彩)

(~~ (Math.random() * (1 << 24))).toString(16)
// ~~ 通过位运算来取整。
// << 左移位。将1的二进制数左移24位。而1<<24 == 2^24(RGB模式下最多可表示的色彩数量)
// toString(16) 将数值转换为16进制的字符串输出。

12、对象方法的兼容性检查

if ('querySelector' in document) {}

13、NodeList || HTMLCollection || Object转换为Array或具有Array的方法

//NodeList: 是指通过集合方法获得到的DOM节点列表,例如:document.getElementsByTagNmae,document.forms…等方法。
//HTMLCollection: HTML块,它与NodeList很像,但是NodeList只支持数字索引,而HTMLCollection可以支持名称作为索引。
//NodeList与HTMLCollection都具有以下类似: 具有数组的外观,但没有数组的方法 、具有length属性、支持索引来读取内容
function makeArray(obj) {
    var rs = [],
        len = obj.length;
    try {
        rs = [].slice.call(obj, 0);
    } catch (e) { //for IE
        for (var i = 0; j = obj[i++];) {
            rs.push(j);
        }
    }
    return rs;
}

14、正则匹配清除两侧空格

var trim = function(v){
    var patrn = /^s*(.*?)s+$/;
    return (patrn.test(v))? RegExp.$1 : '
    null ';
}

15、 时间格式化

function dateFormat(t){        // t 是以秒为单位的值。
    var h = ~~(t/3600),        // t除以3600,取整,得到的就是小时。
        m = ~~(t%3600/60),    // t求余3600,取模,得到的就是去除小时剩下的秒数(分钟 + 秒),再除以60,取整,得到的就是分钟。
        s = ~~(t%3600%60);    // t求余3600,再求余60,剩下的自然就是“秒数”。
 
     return h+'小时'+m+''+s+'';
}

--------------------------------------CSS---------------------------------------------

1、据说是最好的清除浮动的方法,不添加任何元素

.clearfix:after {
    clear: both;
    content: ' ';
    display: block;
    font-size: 0;
    line-height: 0;
    visibility: hidden;
     0;
    height: 0;
}

2、checkbox 不与说明文字对齐

  解决方法:1、vertical-align:top || middle;

       2、vertical-align:-3px;

3、 微软雅黑英文名字: Microsoft Yahei   ||    5FAE8F6F96C59ED1

----------------------------------Bootstrap-------------------------------------------

1、使用bootstrap的模态框的时候,点击模态框旁边总是自动关闭,后来细看文档,发现是没修改backdrop属性。

修改backdrop属性有两种方法:

  (1)在模态框上用data-backdrop来实现

<div class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true"  data-backdrop="static">

  (2)用js控制

$('#myModal').modal({
  backdrop: 'static'
})

2、使用bootstrap时,写手机页面,页面不缩放,还是1000+px的宽度。

   原因:没加meta viewport

 <meta name="viewport" content="width=device-width, initial-scale=1">

-----------------------------------杂---------------------------------------------

1、让IE以最高版本执行

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
原文地址:https://www.cnblogs.com/Duskcl/p/5854065.html