之前寫的jq的公共方法,一些常用內(nèi)容合集

之前寫的公黑,使用jq作為基礎(chǔ)寫的common.js邑商,里面包含了一些常用方法,函數(shù)凡蚜,有詳細的解釋

/**
 * @author:yueziming
 * @version:1.0
 * @description 為了方便書寫統(tǒng)一寫公共方法,用來寫活動人断、靜態(tài)頁面等
 */
window.baseUrl = "";
if (window.location.hostname == 'localhost') {
    // baseURL = 'http://172.16.1.1/TbWebApi/api';
    window.baseUrl = 'http://testapi.aaaa.com/api';
 } else if (window.location.hostname == '172.16.1.1') {
    window.baseUrl = 'http://172.16.1.2/api';
 } else if (window.location.hostname == 'http://tbabc.aaaa.com') {
    window.baseUrl = 'http://testapi.aaaa.com/api';
 } else {
    window.baseUrl = 'http://api.aaaa.com/api';
 }

var Common = {
    //公共ajax方法
    /**
     * @arg url:去除公共地址后后API地址
     * @arg type:請求類型,默認為post
     * @arg data:用于請求的數(shù)據(jù)
     * @arg callback:回調(diào)函數(shù)
     */
    ajax: function (url, type, data, callback) {
        var self = this;
        var myUrl = window.baseUrl + url;
        Common.ajaxLoading();
        $.ajax({
            url: myUrl,
            data: data,
            type: type || "post",
            dataType: 'json',
            //獲取令牌朝蜘,每次請求帶上
            beforeSend: function (request) {
                var token = self.getSession("token");
                if (token) {
                    request.setRequestHeader("X-CSRF-TOKEN", token);
                }
            },
            success: function (res) {
                Common.ajaxLoadingStop();
                callback(res);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                console.log(XMLHttpRequest.status);
                console.log(XMLHttpRequest.readyState);
                console.log(textStatus);
                Common.validateAjaxStatus(XMLHttpRequest.status);
                Common.ajaxLoadingStop();
            }
        });
    },
    /**
     * @desc 請求狀態(tài)碼字典
     */
    ajaxStatusDictionary:{
        status:{
            //請求成功
            "201":"對象創(chuàng)建成功并返回相應(yīng)資源數(shù)據(jù)恶迈。",
            "202":"接受請求,但無法立即完成創(chuàng)建行為芹务,比如其中涉及到一個需要花費若干小時才能完成的任務(wù)蝉绷。返回的實體中應(yīng)該包含當前狀態(tài)的信息,以及指向處理狀態(tài)監(jiān)視器或狀態(tài)預(yù)測的指針枣抱,以便客戶端能夠獲取最新狀態(tài)熔吗。",
            "204":"請求執(zhí)行成功,不返回相應(yīng)資源數(shù)據(jù)佳晶,如 PATCH 桅狠, DELETE 成功。",
            //重定向
            "301":"被請求的資源已永久移動到新位置。",
            "302":"請求的資源現(xiàn)在臨時從不同的 URI 響應(yīng)請求中跌。",
            "303":"對應(yīng)當前請求的響應(yīng)可以在另一個 URI 上被找到咨堤,客戶端應(yīng)該使用 GET 方法進行請求。",
            "307":"對應(yīng)當前請求的響應(yīng)可以在另一個 URI 上被找到漩符,客戶端應(yīng)該保持原有的請求方法進行請求一喘。",
            //條件請求
            "304":"資源自從上次請求后沒有再次發(fā)生變化,主要使用場景在于實現(xiàn)數(shù)據(jù)緩存嗜暴。",
            "409":"請求操作和資源的當前狀態(tài)存在沖突凸克。主要使用場景在于實現(xiàn)并發(fā)控制。",
            "412":"服務(wù)器在驗證在請求的頭字段中給出先決條件時闷沥,沒能滿足其中的一個或多個萎战。主要使用場景在于實現(xiàn)并發(fā)控制。",
            //客戶端錯誤
            "400":"請求體包含語法錯誤舆逃。",
            "401":"需要驗證用戶身份蚂维。",
            "403":"服務(wù)器拒絕執(zhí)行。",
            "404":"找不到目標資源路狮。",
            "405":"不允許執(zhí)行目標方法虫啥,響應(yīng)中應(yīng)該帶有 Allow 頭,內(nèi)容為對該資源有效的 HTTP 方法览祖。",
            "406":"服務(wù)器不支持客戶端請求的內(nèi)容格式孝鹊,但響應(yīng)里會包含服務(wù)端能夠給出的格式的數(shù)據(jù)炊琉。",
            "410":"被請求的資源已被刪除展蒂。",
            "413":"POST 或者 PUT 請求的消息實體過大。",
            "415":"服務(wù)器不支持請求中提交的數(shù)據(jù)的格式苔咪。",
            "422":"請求格式正確锰悼,但是由于含有語義錯誤,無法響應(yīng)团赏。",
            "428":"要求先決條件箕般,如果想要請求能成功必須滿足一些預(yù)設(shè)的條件。",
            //服務(wù)端錯誤
            "500":"服務(wù)器遇到了一個未曾預(yù)料的狀況舔清,導(dǎo)致了它無法完成對請求的處理丝里。",
            "501":"服務(wù)器不支持當前請求所需要的某個功能。",
            "502":"作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請求時体谒,從上游服務(wù)器接收到無效的響應(yīng)杯聚。",
            "503":"由于臨時的服務(wù)器維護或者過載,服務(wù)器當前無法處理請求抒痒。"
        }
    },
    /**
     * @desc 打印錯誤原因
     */
    validateAjaxStatus:function (status) {
        console.log('網(wǎng)絡(luò)異常狀態(tài)碼為:“'+status+'”<br//>請聯(lián)系技術(shù)中心獲取支持幌绍!<br//>詳細錯誤原因為:'+this.ajaxStatusDictionary.status[status]);
    },
    /**
     * @name ajaxLoading
     * @desc ajax加載中樣式
     */
    ajaxLoading: function () {
        var loadingHtml = '<div id="loading" class="spinner"><div class="spinner-container container1"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div><div class="spinner-container container2"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div><div class="spinner-container container3"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div>加載中</div>';
        $("body").append(loadingHtml);
    },
    /**
     * @name ajaxLoadingStop
     * @desc ajax加載完后移除加載樣式
     */
    ajaxLoadingStop: function () {
        $("#loading").remove();
    },
    /**
     * @name tips提示
     * @desc 公共的消息提示,限定時間內(nèi)消失,默認1秒鐘
     * @param msg:需要提示的消息字符串
     * @param time:延遲多長時間開始消息消失
     */
    tips:function(msg,time){
        var endtime = time || 1000;
        var htmlstr = '<div id="tip"><div class="top">提示</div><div class="message">'+msg+'</div></div>';
        $("#tip").remove();
        $("body").append(htmlstr);
        var i = setTimeout(function(){
            $("#tip").fadeOut(1000);
        },endtime);
    },
    /**
     * @name setsession 設(shè)置sessionStorage
     * @desc 對sessionStorage的存的操作方法
     * @param key:sessionStorage的鍵
     * @param value:sessionStorage的值,可以為數(shù)字傀广、字符颁独,也可以為json對象
     */
    setSession:function(key,value){
        if(typeof value == 'object'){
            sessionStorage.setItem(key,JSON.stringify(value));
        }
        else{
            sessionStorage.setItem(key,value);
        }
    },
    /**
     * @name getSesssion 獲取sessionStorage存儲
     * @desc 對sessionStorage的取的操作方法
     * @param key:需要取值的鍵
     */
    getSession:function(key){
        try{
            var data = JSON.parse(sessionStorage.getItem(key));
        }catch(e){
            var data = sessionStorage.getItem(key);
        }
        return data;
    },
    /**
     * @desc 銷毀sessionStorage
     */
    destorySessionstorage:function(key){
        sessionStorage.removeItem(key);
    },
    /**
     * @name getQuery 獲取URL傳參的值
     * @desc 獲取URL傳參的值且避免報錯
     */
    getQuery:function(key){
        var url = location.search;
        var returnStr = '';
        var keyword = key + "=";
        if(keyword){
            try{
                returnStr = url.split(keyword)[1].split("&")[0]
            }
            catch(e){
                returnStr = '';
            }
        }
        return returnStr;
    },
    CookieClass: function () {
        var self = this;
        /**
         * 設(shè)定Cookie
         * @param name 添加Cookie的名稱
         * @param value 添加Cookie的值
         * @param expiresHours 添加Cookie的過期時間(單位:小時)
         * @param path 添加Cookie的域
         */
        self.setCookie = function (name, value, expiresHours, path) {
            if (arguments.length == 1) {
                Quasar._setError(-1, 11, '函數(shù)缺少必要參數(shù)', 'CookieClass/setCookie()');
                return false;
            }
            if (arguments.length == 2) expiresHours = 0;
            if (arguments.length == 3) path = '/';
            var cookieString = name + "=" + encodeURI(value);
            // 判斷是否設(shè)置過期時間
            if (expiresHours > 0) {
                var date = new Date();
                date.setTime(date.getTime() + expiresHours * 3600 * 1000);
                cookieString = cookieString + "; expires=" + date.toUTCString() + "; path=" + path;
            }
            document.cookie = cookieString;
        };
        //noinspection JSUnusedGlobalSymbols
        /**
         * 獲取Cookie
         * @param name 獲取Cookie的名稱
         *
         * @returns string|null|boolean 返回Cookie的值,無對應(yīng)name的Cookie則返回null
         */
        self.getCookie = function (name) {
            if (arguments.length <= 0) {
                Quasar._setError(-1, 11, '函數(shù)缺少必要參數(shù)', 'CookieClass/getCookie()');
                return false;
            }
            var strCookie = document.cookie;
            var arrCookie = strCookie.split("; ");
            for (var i = 0; i < arrCookie.length; i++) {
                var arr = arrCookie[i].split("=");
                if (arr[0] == name) return decodeURI(arr[1]);
            }
            return null;
        };
        //noinspection JSUnusedGlobalSymbols
        /**
         * 刪除Cookie
         * @param name 刪除Cookie的名稱
         */
        self.delCookie = function (name) {
            if (arguments.length <= 0) {
                Quasar._setError(-1, 11, '函數(shù)缺少必要參數(shù)', 'CookieClass/delCookie()');
                return false;
            }
            var date = new Date();
            date.setTime(date.getTime() - 10000);
            document.cookie = name + "=''; expires=" + date.toUTCString();
        };
    },
    /**
     *  @desc 正則判斷字符串是否正確
     */
    RegExpClass: function () {
        var self = this;
        /**
         *  @desc 驗證字符串是否為空
         */
        self.IsNotEmpty = function (str) {
            if(str == '' || str == undefined){
                return false;
            }
            return true;
        };
        /**
         *  @desc 驗證字符串是否為email
         */
        self.IsEmail = function (str) {
            var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.[\w-]+$/i;
            return emailReg.test(str);
        };
        /**
         *  @name Common.IsMobile 驗證字符串是否為手機號碼
         *  @param str:需要驗證的手機號字符串
         *  @desc 這里驗證的是大陸伪冰、香港誓酒、澳門的手機號
         */
        self.IsMobile = function (str) {
            var patrn = /^1[3|4|5|6|7|8|9][0-9]+\d{8}$|^([5|6|9])+\d{7}$|^[6]([8|6])+\d{5}$/; // 手機號碼
            return patrn.test(str);
        };
        /**
         * @desc 驗證字符串是否為電話或者傳真
         */
        self.IsTel = function (str) {
            var patrn = /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
            return patrn.test(str);
        };
        /**
         * @desc 驗證字符串是否為漢字
         */
        self.IsCN = function (str) {
            var p = /^[\u4e00-\u9fa5]+$/;
            return p.test(str);
        };
        /**
         * @desc 驗證字符串是否為數(shù)字
         */
        self.IsNum = function (str) {
            var p = /^\d+$/;
            return p.test(str);
        };
        /**
         * @desc 驗證字符串是否含有特殊字符
         */
        self.IsUnSymbols = function (str) {
            var p = /^[\u4e00-\u9fa5\w \.,(),ê?贮聂。?ê(ê?§)ê?]+$/;
            return p.test(str);
        };
    },
    /**
     * 金錢處理對象
    * {
    *       toThousands: MoneyUtils.toThousands,
    *       encodeMoney: MoneyUtils.encodeMoney,
    *       decodeMoney: MoneyUtils.decodeMoney,
    *       encodeRate: MoneyUtils.encodeRate,
    *       decodeRate: MoneyUtils.decodeRate,
    *       accAdd: MoneyUtils.accAdd,
    *       accDiv: MoneyUtils.accDiv,
    *       accMul: MoneyUtils.accMul
    *       }
    * }
     */
    MoneyUtils: function () {
        var self = this;
        //對金額進行千位符的格式化
        self.toThousands = function (count) {
            var temp1;
            var temp2 = 0;
            try {
                temp1 = count.toString().split(".")[0];
                temp2 = count.toString().split(".")[1];
                var num = (temp1 || 0).toString(), result = '';
                while (num.length > 3) {
                    result = ',' + num.slice(-3) + result;
                    num = num.slice(0, num.length - 3);
                }
                if (num) {
                    if (temp2 != undefined) {
                        result = num + result + "." + temp2;
                    } else {
                        result = num + result;
                    }
                }
            } catch (e) {
                temp1 = count;
                var num = (temp1 || 0).toString(), result = '';
                while (num.length > 3) {
                    result = ',' + num.slice(-3) + result;
                    num = num.slice(0, num.length - 3);
                }
                if (num) {
                    result = num + result;
                }
            }
            return result;
        };
        //處理一下丰捷,解決js浮點型運算的問題。
        //將數(shù)字轉(zhuǎn)換成xxx萬 精確到分寂汇,小數(shù)點后6位
        self.encodeMoney = function (count) {
            var self = this;
            var money = self.accDiv(Number(count), 10000);
            var t;
            try {
                t = money.toString().split(".")[1].length;
            } catch (e) {
                t = 0;
            }
            if (t > 6) {
                //2016.4.13 增加toFixed()函數(shù)去掉自動補零的功能
                for (var i = 6; i > 0; i++) {
                    var num = money.toString().split(".")[1].substring(i - 1, i)
                    if (num == 0) {
                        return money.toFixed(i - 1);
                    } else {
                        return money.toFixed(i);
                    }
                }
                //return money.toFixed(6);
            } else {
                return money;
            }
        };
        //將xx萬轉(zhuǎn)換成數(shù)字
        self.decodeMoney = function (count) {
            var self = this;
            var p_money = count.toString().replace(",", "");
            return self.accMul(Number(p_money), 10000);
        };
        //處理利率問題
        //把數(shù)字轉(zhuǎn)換成千分之多少
        self.encodeRate = function (rate) {
            return 100 * (Number(rate) * 100) / 100;
        };
        /**
         * @desc 把千分之多少轉(zhuǎn)換成數(shù)字
         */
        self.decodeRate = function (rate) {
            return (Number(rate) * 100) / (100 * 100);
        };
        //添加浮點型的加減乘除病往。解決js浮點型的bug
        //加法函數(shù),用來得到精確的加法結(jié)果
        //說明:javascript的加法結(jié)果會有誤差骄瓣,在兩個浮點數(shù)相加的時候會比較明顯停巷。這個函數(shù)返回較為精確的加法結(jié)果。
        //調(diào)用:accAdd(arg1,arg2)
        //返回值:arg1加上arg2的精確結(jié)果
        self.accAdd = function (arg1, arg2) {
            var r1, r2, m;
            try {
                r1 = arg1.toString().split(".")[1].length
            } catch (e) {
                r1 = 0
            }
            try {
                r2 = arg2.toString().split(".")[1].length
            } catch (e) {
                r2 = 0
            }
            m = Math.pow(10, Math.max(r1, r2))
            return (arg1 * m + arg2 * m) / m
        };
        //除法函數(shù)榕栏,用來得到精確的除法結(jié)果
        //說明:javascript的除法結(jié)果會有誤差畔勤,在兩個浮點數(shù)相除的時候會比較明顯。這個函數(shù)返回較為精確的除法結(jié)果扒磁。
        //調(diào)用:accDiv(arg1,arg2)
        //返回值:arg1除以arg2的精確結(jié)果
        self.accDiv = function (arg1, arg2) {
            var t1 = 0, t2 = 0, r1, r2;
            try {
                t1 = arg1.toString().split(".")[1].length
            } catch (e) {
            }
            try {
                t2 = arg2.toString().split(".")[1].length
            } catch (e) {
            }
            with (Math) {
                r1 = Number(arg1.toString().replace(".", ""))
                r2 = Number(arg2.toString().replace(".", ""))
                return (r1 / r2) * pow(10, t2 - t1);
            }
        };
        //乘法函數(shù)庆揪,用來得到精確的乘法結(jié)果
        //說明:javascript的乘法結(jié)果會有誤差,在兩個浮點數(shù)相乘的時候會比較明顯妨托。這個函數(shù)返回較為精確的乘法結(jié)果缸榛。
        //調(diào)用:accMul(arg1,arg2)
        //返回值:arg1乘以arg2的精確結(jié)果
        self.accMul = function (arg1, arg2) {
            var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
            try {
                m += s1.split(".")[1].length
            } catch (e) {
            }
            try {
                m += s2.split(".")[1].length
            } catch (e) {
            }
            return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
        };
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兰伤,隨后出現(xiàn)的幾起案子内颗,更是在濱河造成了極大的恐慌,老刑警劉巖敦腔,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件均澳,死亡現(xiàn)場離奇詭異,居然都是意外死亡符衔,警方通過查閱死者的電腦和手機找前,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來判族,“玉大人躺盛,你說我怎么就攤上這事头岔○欤” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵侧巨,是天一觀的道長。 經(jīng)常有香客問我躯枢,道長则吟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任锄蹂,我火速辦了婚禮氓仲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘得糜。我一直安慰自己敬扛,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布朝抖。 她就那樣靜靜地躺著啥箭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪治宣。 梳的紋絲不亂的頭發(fā)上急侥,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音侮邀,去河邊找鬼坏怪。 笑死,一個胖子當著我的面吹牛绊茧,可吹牛的內(nèi)容都是我干的铝宵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼华畏,長吁一口氣:“原來是場噩夢啊……” “哼鹏秋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起唯绍,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤拼岳,失蹤者是張志新(化名)和其女友劉穎枝誊,沒想到半個月后况芒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡叶撒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年绝骚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祠够。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡压汪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出古瓤,到底是詐尸還是另有隱情止剖,我是刑警寧澤腺阳,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站穿香,受9級特大地震影響亭引,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜皮获,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一焙蚓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洒宝,春花似錦购公、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靠瞎,卻和暖如春绘闷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背较坛。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工印蔗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丑勤。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓华嘹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親法竞。 傳聞我的和親對象是個殘疾皇子耙厚,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容