zoukankan      html  css  js  c++  java
  • 常用js函数

     /**   AJAX封装  原生js   **/
            ajax({
                url:"https://open.weixin.qq.com/connect/qrconnect", //请求地址
                type:"GET",   //请求方式
                data:{appid:"wx82670fae8b0fa28d",redirect_uri:"http://abc.lalabb.cn",response_type:"code",scope:"snsapi_login"},   // 请求参数
                datatype:"json",
                success:function(response,xml){
                    // 成功后执行的代码
                    console.log(response);
                },
                fail:function(status){
                    // 失败后执行的代码
                }
            });

            function ajax(options){
                options = options || {};
                options.type = (options.type || "GET").toUpperCase();
                options.dataType = options.dataType || "json";
                var params = formatParams(options.data);
                 //xhr 兼容IE6
                 if(window.XMLHttpRequest){
                     var xhr = new XMLHttpRequest();
                 }else{
                    var xhr = new ActiveXObject('Microsoft.XMLHTTP');
                 }
                 // 接收
                xhr.onreadystatechange = function(){
                    if(xhr.readyState == 4){
                        var status = xhr.status;
                        if(status>=200 && status < 300){
                            options.success && options.success(xhr.responseText, xhr.responseXML);
                        }else{
                            options.fail && options.fail(status);
                        }
                    }
                }
                // 链接 / 发送
                if(options.type == "GET"){
                    xhr.open("GET",options.url+"?"+params,true);
                    xhr.send(null);
                }else if(options.type == "POST"){
                    xhr.open("POST",options.url,true);
                    // 设置表单提交时的内容类型
                    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                    xhr.send(params);
                }
            }

            // 格式化参数
            function formatParams(data){
                var arr = [];
                for(var name in data){
                    arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
                }
                arr.push(("v="+Math.random()).replace(".",""));
                return arr.join("&");
            }

    /**   判断微信内置浏览器   **/
            function isWeiXin(){
                var ua = window.navigator.userAgent.toLowerCase();
                if(ua.match(/MicroMessenger/i) == 'micromessenger'){
                    // 是微信浏览器执行
                    alert('true');
                }else{
                    // 其他浏览器执行
                    alert('false');
                }
            }


    /**   获取url参数   **/
    function getUrlParam(name){
        var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
        var r = window.location.search.substr(1).match(reg);  //匹配目标参数
        if (r!=null) return unescape(r[2]); return null; //返回参数值
    }



    /**    原生js  get   **/
    var XHR=null;  
    if (window.XMLHttpRequest) {  
        // 非IE内核  
        XHR = new XMLHttpRequest();  
    } else if (window.ActiveXObject) {  
        // IE内核,这里早期IE的版本写法不同,具体可以查询下  
        XHR = new ActiveXObject("Microsoft.XMLHTTP");  
    } else {  
        XHR = null;  
    }  
     
    if(XHR){  
        XHR.open("GET", "ajaxServer.action");  
     
        XHR.onreadystatechange = function () {  
            // readyState值说明  
            // 0,初始化,XHR对象已经创建,还未执行open  
            // 1,载入,已经调用open方法,但是还没发送请求  
            // 2,载入完成,请求已经发送完成  
            // 3,交互,可以接收到部分数据  
     
            // status值说明  
            // 200:成功  
            // 404:没有发现文件、查询或URl  
            // 500:服务器产生内部错误  
            if (XHR.readyState == 4 && XHR.status == 200) {  
                // 这里可以对返回的内容做处理  
                // 一般会返回JSON或XML数据格式  
                console.log(XHR.responseText);  
                // 主动释放,JS本身也会回收的  
                XHR = null;  
            }  
        };  
        XHR.send();  
    }  






    /**    判断是否为手机浏览器    **/

    var browser={
        versions:function(){
               var u = navigator.userAgent, app = navigator.appVersion;
               return {//移动终端浏览器版本信息
                    trident: u.indexOf('Trident') > -1, //IE内核
                    presto: u.indexOf('Presto') > -1, //opera内核
                    webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
                    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
                    mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否为移动终端
                    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                    android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
                    iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
                    iPad: u.indexOf('iPad') > -1, //是否iPad
                    webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
                };
             }(),
             language:(navigator.browserLanguage || navigator.language).toLowerCase()
    }
    // document.writeln("语言版本: "+browser.language);
    // document.writeln(" 是否为移动终端: "+browser.versions.mobile);
    // document.writeln(" ios终端: "+browser.versions.ios);
    // document.writeln(" android终端: "+browser.versions.android);
    // document.writeln(" 是否为iPhone: "+browser.versions.iPhone);
    // document.writeln(" 是否iPad: "+browser.versions.iPad);
    // document.writeln(navigator.userAgent);

    /**    判断手机端还是pc端    **/
    function browserRedirect() {
                var sUserAgent = navigator.userAgent.toLowerCase();
                var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
                var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";
                var bIsMidp = sUserAgent.match(/midp/i) == "midp";
                var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";
                var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";
                var bIsAndroid = sUserAgent.match(/android/i) == "android";
                var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";
                var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";
                document.writeln("您的浏览设备为:");
                if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {
                    document.writeln("phone");
                } else {
                    document.writeln("pc");
                }
            }

            browserRedirect();


    // 动态加载外部js文件
    var flag = true;
    if( flag ){
        loadScript( "js/index.js" );
    };
    function loadScript( url ){
        var script = document.createElement( "script" );
        script.type = "type/javascipt";
        script.src = url;
        document.getElementsByTagName( "head" )[0].appendChild( script );
    };

    // 动态加载外部css样式
    if( flag ){
        loadCss( "css/base.css" );
    };
    function loadCss( url ){
        var link = document.createElement( "link" );
        link.type = "text/css";
        link.rel = "stylesheet";
        link.href = url;
        document.getElementsByTagName( "head" )[0].appendChild( link );
    };


    // jquery 动态加载js后执行callback
    <script src="/lib/js/jquery.min.js"></script>
    <script>
         var loadScripts= function (files, callback) {
            var file = files.shift();
            $.getScript(file, function () {
                if (files.length) {
                    loadScripts(files, callback);
                } else {
                    if (callback) {
                        callback();
                    }
                }
            });
        }

        loadScripts(['test.js'],function(){
            alert(str);
        })
    </script>

    //   jsonp方式
    function jsonp(config) {
        var options = config || {};   // 需要配置url, success, time, fail四个属性
        var callbackName = ('jsonp_' + Math.random()).replace(".", "");
        var oHead = document.getElementsByTagName('head')[0];
        var oScript = document.createElement('script');
        oHead.appendChild(oScript);
        window[callbackName] = function(json) {  //创建jsonp回调函数
            oHead.removeChild(oScript);
            clearTimeout(oScript.timer);
            window[callbackName] = null;
            options.success && options.success(json);   //先删除script标签,实际上执行的是success函数
        };
        oScript.src = options.url + '?' + callbackName;    //发送请求
        if (options.time) {  //设置超时处理
            oScript.timer = setTimeout(function () {
                window[callbackName] = null;
                oHead.removeChild(oScript);
                options.fail && options.fail({ message: "超时" });
            }, options.time);
        }
        };
    // 使用方法:
    jsonp({
        url: '/b.com/b.json',
        success: function(d){
            //数据处理
        },
        time: 5000,
        fail: function(){
            //错误处理
        }      
        });

    // 调用视频全屏模式
    function videoFull(docElm){
        console.log("全屏模式");
        // var docElm = document.getElementById(id);
        //W3C
        if(docElm.requestFullscreen){
            docElm.requestFullscreen();
        }
        //FireFox
        else if (docElm.mozRequestFullScreen) {
            docElm.mozRequestFullScreen();
        }
        //Chrome等
        else if (docElm.webkitRequestFullScreen) {
            docElm.webkitRequestFullScreen();
        }
        //IE11
        else if (elem.msRequestFullscreen) {
            elem.msRequestFullscreen();
        }
    }
    // 退出全屏
    function closeVideoFull(docElm){
        if (document.exitFullscreen) {
            document.exitFullscreen();
        }else if (document.mozCancelFullScreen) {
            document.mozCancelFullScreen();
        }else if (document.webkitCancelFullScreen) {
            document.webkitCancelFullScreen();
        }else if (document.msExitFullscreen) {
            document.msExitFullscreen();
        }
    }

    // 截取固定数量的字符串
    cutStr(str,36,6,10)   6个字或10字母和数字
    function cutStr(str,codeNum,textNum,num){
        var len = escape(str).length;
        if(len>codeNum){
            var s = str.substr(0,textNum)+"...";
            return s;
        }else if(len<codeNum){
            if(str.length>num){
                var s = str.substr(0,num)+"...";
                return s;
            }else{
                return str;
            }
            
        }else{
            return str;
        }
    };

    // 去掉时间 2016-11-28 14:27:52 的秒
    function cutTime(str){
        str = str.replace(/-/g,"/");
        var date = new Date(str );
        var timeStamp = date.getTime();
        var m = date.getMonth() + 1;
        var d = date.getDate();
        var start = str.indexOf(" ") + 1;
        var end = str.lastIndexOf(":");
        var newStr = m + "月" + d + "日" + str.substring(start,end);
        // 时间格式 11月28日14:27   // 时间戳
        return {"timeStr":newStr,"timeStamp":timeStamp};
    }

    // 无刷新修改url
       function changeURL(){
                    var url = document.getElementById('url').value;
                    window.history.pushState({},0,'http://'+window.location.host+'/'+url);      
               }

    // 按照汉语拼音字母排序
    var array = ['武汉', '北京', '上海', '天津'];
    array = array.sort(
        function compareFunction(param1, param2) {
            return param1.localeCompare(param2);
        }
    );
    console.log(array);

    //获取页面文件名和参数
    function GetPageurl(){
        var url=window.location.href;//获取完整URL地址
        var tmp= new Array();//临时变量,用于保存分割字符串
        tmp=url.split("/");//按照"/"分割
        var cc = tmp[tmp.length-1];//获取最后一部分,即文件名和参数
        tmp=cc.split("?");//把参数和文件名分割开
        return tmp[0];//返回值
    }

    // 判断是否安装flash
        function flashChecker() {  
            var hasFlash = 0;         //是否安装了flash  
            var flashVersion = 0; //flash版本  
            var isIE = /*@cc_on!@*/0;      //是否IE浏览器  
     
            if (isIE) {  
                var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');  
                if (swf) {  
                    hasFlash = 1;  
                    VSwf = swf.GetVariable("$version");  
                    flashVersion = parseInt(VSwf.split(" ")[1].split(",")[0]);  
                }  
            } else {  
                if (navigator.plugins && navigator.plugins.length > 0) {  
                    var swf = navigator.plugins["Shockwave Flash"];  
                    if (swf) {  
                        hasFlash = 1;  
                        var words = swf.description.split(" ");  
                        for (var i = 0; i < words.length; ++i) {  
                            if (isNaN(parseInt(words[i]))) continue;  
                            flashVersion = parseInt(words[i]);  
                        }  
                    }  
                }  
            }  
            return { f: hasFlash, v: flashVersion };  
        }  
     
        var fls = flashChecker();  
        var s = "";  
        if (fls.f) document.write("您安装了flash,当前flash版本为: " + fls.v + ".x");  
        else document.write("您没有安装flash");  

    // 简单提示弹出层
    function dialog(str){
        var layer=document.createElement("div");
        layer.id="layer";
        layer.innerHTML = str;
        var style={
            "background": "rgba(0, 0, 0, 0.4)",
            "border-radius": "5px",
            "bottom": "0",
            "color": "#fff",
            "font-size": "0.35rem",
            "height": "1rem",
            "left": "0",
            "line-height": "1rem",
            "margin": "auto",
            "position": "fixed",
            "right": "0",
            "text-align": "center",
            "top": "0",
            "width": "2.8rem",
            "z-index": "999"
        }
        for(var i in style){
            layer.style[i]=style[i];   
        }
        if(document.getElementById("layer")==null){
            document.body.appendChild(layer);
            setTimeout("document.body.removeChild(layer)",1500);
        }
    }


    =========================================================================================================================

    jquery ajax函数

    我自己封装了一个ajax的函数,代码如下:
    var Ajax = function(url, type success, error) {
        $.ajax({
            url: url,
            type: type,
            dataType: 'json',
            timeout: 10000,
            success: function(d) {
                var data = d.data;
                success && success(data);
            },
            error: function(e) {
                error && error(e);
            }
        });
        };
    // 使用方法:
    Ajax('/data.json', 'get', function(data) {
        console.log(data);
        });
    jsonp方式

    有时候我们为了跨域,要使用jsonp的方法,我也封装了一个函数:
    function jsonp(config) {
        var options = config || {};   // 需要配置url, success, time, fail四个属性
        var callbackName = ('jsonp_' + Math.random()).replace(".", "");
        var oHead = document.getElementsByTagName('head')[0];
        var oScript = document.createElement('script');
        oHead.appendChild(oScript);
        window[callbackName] = function(json) {  //创建jsonp回调函数
            oHead.removeChild(oScript);
            clearTimeout(oScript.timer);
            window[callbackName] = null;
            options.success && options.success(json);   //先删除script标签,实际上执行的是success函数
        };
        oScript.src = options.url + '?' + callbackName;    //发送请求
        if (options.time) {  //设置超时处理
            oScript.timer = setTimeout(function () {
                window[callbackName] = null;
                oHead.removeChild(oScript);
                options.fail && options.fail({ message: "超时" });
            }, options.time);
        }
        };
    // 使用方法:
    jsonp({
        url: '/b.com/b.json',
        success: function(d){
            //数据处理
        },
        time: 5000,
        fail: function(){
            //错误处理
        }      
        });

    常用正则验证表达式:

    *****手机号验证
    var validate = function(num) {
        var exp = /^1[3-9]\d{9}$/;
        return exp.test(num);
        };

    *****身份证号验证
    var exp = /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/;

    *****ip验证
    var exp = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;


    常用js函数:

    **********返回顶部
    $(window).scroll(function() {
        var a = $(window).scrollTop();
        if(a > 100) {
            $('.go-top').fadeIn();
        }else {
            $('.go-top').fadeOut();
        }
        });
    $(".go-top").click(function(){
        $("html,body").animate({scrollTop:"0px"},'600');
        });


    **********阻止冒泡
    function stopBubble(e){
        e = e || window.event;  
        if(e.stopPropagation){
            e.stopPropagation();  //W3C阻止冒泡方法  
        }else {  
            e.cancelBubble = true; //IE阻止冒泡方法  (**好像不好使**)
        } 

    }


    **********全部替换replaceAll
    var replaceAll = function(bigStr, str1, str2) {  //把bigStr中的所有str1替换为str2
        var reg = new RegExp(str1, 'gm');
        return bigStr.replace(reg, str2);
        }


    **********获取浏览器url中的参数值
    var getURLParam = function(name) {
        return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)', "ig").exec(location.search) || [, ""])[1].replace(/\+/g, '%20')) || null;
        };


    *********深度拷贝对象
    function cloneObj(obj) {
        var o = obj.constructor == Object ? new obj.constructor() : new obj.constructor(obj.valueOf());
        for(var key in obj){
            if(o[key] != obj[key] ){
                if(typeof(obj[key]) == 'object' ){
                    o[key] = mods.cloneObj(obj[key]);
                }else{
                    o[key] = obj[key];
                }
            }
        }
        return o;
        }


    ********数组去重
    var unique = function(arr) {
        var result = [], json = {};
        for (var i = 0, len = arr.length; i < len; i++){
            if (!json[arr[i]]) {
                json[arr[i]] = 1;
                result.push(arr[i]);  //返回没被删除的元素
            }
        }
        return result;
        };


    **********判断数组元素是否重复
    var isRepeat = function(arr) {  //arr是否有重复元素
        var hash = {};
        for (var i in arr) {
            if (hash[arr[i]]) return true;
            hash[arr[i]] = true;
        }
        return false;
        };


    **********生成随机数
    function randombetween(min, max){
        return min + (Math.random() * (max-min +1));
        }


    ************操作cookie
    own.setCookie = function(cname, cvalue, exdays){
        var d = new Date();
        d.setTime(d.getTime() + (exdays*24*60*60*1000));
        var expires = 'expires='+d.toUTCString();
        document.cookie = cname + '=' + cvalue + '; ' + expires;
        };
    own.getCookie = function(cname) {
        var name = cname + '=';
        var ca = document.cookie.split(';');
        for(var i=0; i< ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') c = c.substring(1);
            if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
        }
        return '';
        };

    *************知识技巧总结

    数据类型

    underfined、null、0、false、NaN、空字符串。他们的逻辑非结果均为true。

    闭包格式
    好处:避免命名冲突(全局变量污染)。
    (function(a, b) {
        console.log(a+b);  //30
        })(10, 20);


    截取和清空数组
    var arr = [12, 222, 44, 88];
    arr.length = 2;   //截取,arr = [12, 222];  
    arr.length = 0;   //清空,arr will be equal to [].


    获取数组的最大最小值
    var numbers = [5, 45822, 120, -215];
    var maxInNumbers = Math.max.apply(Math, numbers);   //45822
    var minInNumbers = Math.min.apply(Math, numbers);   //-215


    浮点数计算问题
    0.1 + 0.2 == 0.3   //false
    为什么呢?因为0.1+0.2等于0.30000000000000004。JavaScript的数字都遵循IEEE 754标准构建,在内部都是64位浮点小数表示。可以通过使用toFixed()来解决这个问题。

    数组排序sort函数
    var arr = [1, 5, 6, 3];    //数字数组
    arr.sort(function(a, b) {
        return a - b;   //从小到大排
        return b - a;   //从大到小排
        return Math.random() - 0.5;   //数组洗牌
        });
    var arr = [{   //对象数组
        num: 1,
        text: 'num1'
        }, {
        num: 5,
        text: 'num2'
        }, {
        num: 6,
        text: 'num3'
        }, {
        num: 3,
        text: 'num4'
        }];   
    arr.sort(function(a, b) {
        return a.num - b.num;   //从小到大排
        return b.num - a.num;   //从大到小排
        });


    对象和字符串的转换
    var obj = {a: 'aaa', b: 'bbb'};
    var objStr = JSON.stringify(obj);    // "{"a":"aaa","b":"bbb"}"
    var newObj = JSON.parse(objStr);     // {a: "aaa", b: "bbb"}

  • 相关阅读:
    git文件泄露
    shodan 的初始化及简单命令
    结构体用sort排序
    循环节计算
    免责申明!!
    偶然发现国外一个linux命令语法练习靶场bandit
    HackBar快捷键
    b站1024程序员节-技术对抗赛
    记一次PC版微信崩溃后历史聊天记录丢失的处理(已解决)
    wireshark从入门到精通3
  • 原文地址:https://www.cnblogs.com/gzh529/p/8334961.html
Copyright © 2011-2022 走看看