zoukankan      html  css  js  c++  java
  • 前端踩过的坑

    -----------------------------------------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">
  • 相关阅读:
    Jmeter 脚本录制
    Scrapy 爬虫模拟登陆的3种策略
    Scrapy Shell
    Ipython
    XPath helper
    python3 接口测试数据驱动之操作mysql数据库
    Pandas 基础(17)
    Pandas 基础(16)
    在 Laravel 项目中使用 Elasticsearch 做引擎,scout 全文搜索(小白出品, 绝对白话)
    Pandas 基础(15)
  • 原文地址:https://www.cnblogs.com/Duskcl/p/5854065.html
Copyright © 2011-2022 走看看