javascript ---(常用工具类的封装)

1. type 类型判断

isString(o) { //是否字符串
    return Object.prototype.toString.call(o).slice(8, -1) === 'String'
}

isNumber(o) { //是否数字
    return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
}

isObj(o) { //是否对象
    return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
}

isArray(o) { //是否数组
    return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
}

isDate(o) { //是否时间
    return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
}

isBoolean(o) { //是否boolean
    return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
}

isFunction(o) { //是否函数
    return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
}

isNull(o) { //是否为null
    return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
}

isUndefined(o) { //是否undefined
    return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
}

isFalse(o) {
    if (!o || o === 'null' || o === 'undefined' || o === 'false' || o === 'NaN') return true
    return false
}

isTrue(o) {
    return !this.isFalse(o)
}

isIos() {
    var u = navigator.userAgent;
    if (u.indexOf('Android') & gt; -1 || u.indexOf('Linux') & gt; -1) {//安卓手机
        // return "Android";
        return false
    } else if (u.indexOf('iPhone') & gt; -1) {//苹果手机
        // return "iPhone";
        return true
    } else if (u.indexOf('iPad') & gt; -1) {//iPad
        // return "iPad";
        return false
    } else if (u.indexOf('Windows Phone') & gt; -1) {//winphone手机
        // return "Windows Phone";
        return false
    }else {
        return false
    }
}

isPC() { //是否为PC端
    var userAgentInfo = navigator.userAgent;
    var Agents = ["Android", "iPhone",
        "SymbianOS", "Windows Phone",
        "iPad", "iPod"];
    var flag = true;
    for (var v = 0; v & lt; Agents.length; v++) {
        if (userAgentInfo.indexOf(Agents[v]) & gt; 0) {
            flag = false;
            break;
        }
    }
    return flag;
}

browserType(){
    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
    var isOpera = userAgent.indexOf("Opera") & gt; -1; //判断是否Opera浏览器
    var isIE = userAgent.indexOf("compatible") & gt; -1 & amp;& amp; userAgent.indexOf("MSIE") & gt; -1 & amp;& amp; !isOpera; //判断是否IE浏览器
    var isEdge = userAgent.indexOf("Edge") & gt; -1; //判断是否IE的Edge浏览器
    var isFF = userAgent.indexOf("Firefox") & gt; -1; //判断是否Firefox浏览器
    var isSafari = userAgent.indexOf("Safari") & gt; -1 & amp;& amp; userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器
    var isChrome = userAgent.indexOf("Chrome") & gt; -1 & amp;& amp; userAgent.indexOf("Safari") & gt; -1; //判断Chrome浏览器
    if (isIE) {
        var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
        reIE.test(userAgent);
        var fIEVersion = parseFloat(RegExp["$1"]);
        if (fIEVersion == 7) return "IE7"
        else if (fIEVersion == 8) return "IE8";
        else if (fIEVersion == 9) return "IE9";
        else if (fIEVersion == 10) return "IE10";
        else if (fIEVersion == 11) return "IE11";
        else return "IE7以下"//IE版本过低
    }

    if (isFF) return "FF";
    if (isOpera) return "Opera";
    if (isEdge) return "Edge";
    if (isSafari) return "Safari";
    if (isChrome) return "Chrome";
} checkStr

    (str, type) {
    switch (type) {
        case 'phone': //手机号码
            return /^1[3|4|5|7|8][0-9]{9}$/.test(str);
        case 'tel': //座机
            return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
        case 'card': //身份证
            return /^\d{15}|\d{18}$/.test(str);
        case 'pwd': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
            return /^[a-zA-Z]\w{5,17}$/.test(str)
        case 'postal': //邮政编码
            return /[1-9]\d{5}(?!\d)/.test(str);
        case 'QQ': //QQ号
            return /^[1-9][0-9]{4,9}$/.test(str);
        case 'email': //邮箱
            return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
        case 'money': //金额(小数点2位)
            return /^\d*(?:\.\d{0,2})?$/.test(str);
        case 'URL': //网址
            return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
        case 'IP': //IP
            return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
        case 'date': //日期时间
            return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/.test(str)
        case 'number': //数字
            return /^[0-9]$/.test(str);
        case 'english': //英文
            return /^[a-zA-Z]+$/.test(str);
        case 'chinese': //中文
            return /^[\u4E00-\u9FA5]+$/.test(str);
        case 'lower': //小写
            return /^[a-z]+$/.test(str);
        case 'upper': //大写
            return /^[A-Z]+$/.test(str);
        case 'HTML': //HTML标记
            return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
        default:
            return true;
    }
}

2. 时间的一些方法

  1 /**
  2  * 格式化时间
  3  * 
  4  * @param  {time} 时间
  5  * @param  {cFormat} 格式
  6  * @return {String} 字符串
  7  *
  8  * @example formatTime('2018-1-29', '{y}/{m}/{d} {h}:{i}:{s}') // -> 2018/01/29 00:00:00
  9  */
 10 formatTime(time, cFormat) {
 11     if (arguments.length === 0) return null
 12     if ((time + '').length === 10) {
 13         time = +time * 1000
 14     }
 15 
 16     var format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}', date
 17     if (typeof time === 'object') {
 18         date = time
 19     } else {
 20         date = new Date(time)
 21     }
 22 
 23     var formatObj = {
 24         y: date.getFullYear(),
 25         m: date.getMonth() + 1,
 26         d: date.getDate(),
 27         h: date.getHours(),
 28         i: date.getMinutes(),
 29         s: date.getSeconds(),
 30         a: date.getDay()
 31     }
 32     var time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
 33         var value = formatObj[key]
 34         if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
 35         if (result.length > 0 && value < 10) {
 36             value = '0' + value
 37         }
 38         return value || 0
 39     })
 40     return time_str
 41 }
 42 
 43 
 44 /**
 45  * 返回指定长度的月份集合
 46  * 
 47  * @param  {time} 时间
 48  * @param  {len} 长度
 49  * @param  {direction} 方向:  1: 前几个月;  2: 后几个月;  3:前后几个月  默认 3
 50  * @return {Array} 数组
 51  * 
 52  * @example   getMonths('2018-1-29', 6, 1)  // ->  ["2018-1", "2017-12", "2017-11", "2017-10", "2017-9", "2017-8", "2017-7"]
 53  */
 54 getMonths(time, len, direction) {
 55     var mm = new Date(time).getMonth(),
 56         yy = new Date(time).getFullYear(),
 57         direction = isNaN(direction) ? 3 : direction,
 58         index = mm;
 59     var cutMonth = function(index) {
 60         if ( index <= len && index >= -len) {
 61             return direction === 1 ? formatPre(index).concat(cutMonth(++index)):
 62                 direction === 2 ? formatNext(index).concat(cutMonth(++index)):formatCurr(index).concat(cutMonth(++index))
 63         }
 64         return []
 65     }
 66     var formatNext = function(i) {
 67         var y = Math.floor(i/12),
 68             m = i%12
 69         return [yy+y + '-' + (m+1)]
 70     }
 71     var formatPre = function(i) {
 72         var y = Math.ceil(i/12),
 73             m = i%12
 74         m = m===0 ? 12 : m
 75         return [yy-y + '-' + (13 - m)]
 76     }
 77     var formatCurr = function(i) {
 78         var y = Math.floor(i/12),
 79             yNext = Math.ceil(i/12),
 80             m = i%12,
 81             mNext = m===0 ? 12 : m
 82         return [yy-yNext + '-' + (13 - mNext),yy+y + '-' + (m+1)]
 83     }
 84     // 数组去重
 85     var unique = function(arr) {
 86         if ( Array.hasOwnProperty('from') ) {
 87             return Array.from(new Set(arr));
 88         }else{
 89             var n = {},r=[]; 
 90             for(var i = 0; i < arr.length; i++){
 91                 if (!n[arr[i]]){
 92                     n[arr[i]] = true; 
 93                     r.push(arr[i]);
 94                 }
 95             }
 96             return r;
 97         }
 98     }
 99     return direction !== 3 ? cutMonth(index) : unique(cutMonth(index).sort(function(t1, t2){
100         return new Date(t1).getTime() - new Date(t2).getTime()
101     }))
102 }
103 
104 
105 
106 /**
107  * 返回指定长度的天数集合
108  * 
109  * @param  {time} 时间
110  * @param  {len} 长度
111  * @param  {direction} 方向: 1: 前几天;  2: 后几天;  3:前后几天  默认 3
112  * @return {Array} 数组
113  *
114  * @example date.getDays('2018-1-29', 6) // -> ["2018-1-26", "2018-1-27", "2018-1-28", "2018-1-29", "2018-1-30", "2018-1-31", "2018-2-1"]
115  */
116 getDays(time, len, diretion) {
117     var tt = new Date(time)
118     var getDay = function(day) {
119         var t = new Date(time)
120         t.setDate(t.getDate() + day)
121         var m = t.getMonth()+1
122         return t.getFullYear()+'-'+m+'-'+t.getDate()
123     }
124     var arr = []
125     if (diretion === 1) {
126         for (var i = 1; i <= len; i++) {
127             arr.unshift(getDay(-i))
128         }
129     }else if(diretion === 2) {
130         for (var i = 1; i <= len; i++) {
131             arr.push(getDay(i))
132         }
133     }else {
134         for (var i = 1; i <= len; i++) {
135             arr.unshift(getDay(-i))
136         }
137         arr.push(tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate())
138         for (var i = 1; i <= len; i++) {
139             arr.push(getDay(i))
140         }
141     }
142     return diretion === 1 ? arr.concat([tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate()]) : 
143         diretion === 2 ? [tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate()].concat(arr) : arr
144 }
145 
146 
147 /**
148  * @param  {s} 秒数
149  * @return {String} 字符串 
150  *
151  * @example formatHMS(3610) // -> 1h0m10s
152  */
153 formatHMS (s) {
154     var str = ''
155     if (s > 3600) {
156         str = Math.floor(s/3600)+'h'+Math.floor(s%3600/60)+'m'+s%60+'s'
157     }else if(s > 60) {
158         str = Math.floor(s/60)+'m'+s%60+'s'
159     }else{
160         str = s%60+'s'
161     }
162     return str
163 }
164 
165 /*获取某月有多少天*/
166 getMonthOfDay (time) {
167     var date = new Date(time)
168     var year = date.getFullYear()
169     var mouth = date.getMonth() + 1
170     var days
171 
172     //当月份为二月时,根据闰年还是非闰年判断天数
173     if (mouth == 2) {
174         days = (year%4==0 && year%100==0 && year%400==0) || (year%4==0 && year%100!=0) ? 28 : 29
175     } else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
176         //月份为:1,3,5,7,8,10,12 时,为大月.则天数为31;
177         days = 31
178     } else {
179         //其他月份,天数为:30.
180         days = 30
181     }
182     return days
183 }
184 
185 /*获取某年有多少天*/
186 getYearOfDay (time) {
187     var firstDayYear = this.getFirstDayOfYear(time);
188     var lastDayYear = this.getLastDayOfYear(time);
189     var numSecond = (new Date(lastDayYear).getTime() - new Date(firstDayYear).getTime())/1000;
190     return Math.ceil(numSecond/(24*3600));
191 }
192 
193 /*获取某年的第一天*/
194 getFirstDayOfYear (time) {
195     var year = new Date(time).getFullYear();
196     return year + "-01-01 00:00:00";
197 }
198 
199 /*获取某年最后一天*/
200 getLastDayOfYear (time) {
201     var year = new Date(time).getFullYear();
202     var dateString = year + "-12-01 00:00:00";
203     var endDay = this.getMonthOfDay(dateString);
204     return year + "-12-" + endDay + " 23:59:59";
205 }
206 
207 /*获取某个日期是当年中的第几天*/
208 getDayOfYear (time) {
209     var firstDayYear = this.getFirstDayOfYear(time);
210     var numSecond = (new Date(time).getTime() - new Date(firstDayYear).getTime())/1000;
211     return Math.ceil(numSecond/(24*3600));
212 }
213 
214 /*获取某个日期在这一年的第几周*/
215 getDayOfYearWeek (time) {
216     var numdays = this.getDayOfYear(time);
217     return Math.ceil(numdays / 7);
218 }

3. Array

  1 /*判断一个元素是否在数组中*/
  2 contains (arr, val) {
  3     return arr.indexOf(val) != -1 ? true : false;
  4 }
  5 
  6 
  7 /**
  8  * @param  {arr} 数组
  9  * @param  {fn} 回调函数
 10  * @return {undefined}
 11  */
 12 each (arr, fn) {
 13     fn = fn || Function;
 14     var a = [];
 15     var args = Array.prototype.slice.call(arguments, 1);
 16     for(var i = 0; i < arr.length; i++) {
 17         var res = fn.apply(arr, [arr[i], i].concat(args));
 18         if(res != null) a.push(res);
 19     }
 20 }
 21 
 22 /**
 23  * @param  {arr} 数组
 24  * @param  {fn} 回调函数
 25  * @param  {thisObj} this指向
 26  * @return {Array} 
 27  */
 28 map (arr, fn, thisObj) {
 29     var scope = thisObj || window;
 30     var a = [];
 31     for(var i = 0, j = arr.length; i < j; ++i) {
 32         var res = fn.call(scope, arr[i], i, this);
 33         if(res != null) a.push(res);
 34     }
 35     return a;
 36 }
 37 
 38 
 39 /**
 40  * @param  {arr} 数组
 41  * @param  {type} 1:从小到大   2:从大到小   3:随机
 42  * @return {Array}
 43  */
 44 sort (arr, type = 1) {
 45     return arr.sort( (a, b) => {
 46         switch(type) {
 47             case 1:
 48                 return a - b;
 49             case 2:
 50                 return b - a;
 51             case 3:
 52                 return Math.random() - 0.5;
 53             default:
 54                 return arr;
 55         }
 56     })
 57 }
 58 
 59 /*去重*/
 60 unique (arr) {
 61     if ( Array.hasOwnProperty('from') ) {
 62         return Array.from(new Set(arr));
 63     }else{
 64         var n = {},r=[]; 
 65         for(var i = 0; i < arr.length; i++){
 66             if (!n[arr[i]]){
 67                 n[arr[i]] = true; 
 68                 r.push(arr[i]);
 69             }
 70         }
 71         return r;
 72     }
 73     // 注:上面 else 里面的排重并不能区分 2 和 '2',但能减少用indexOf带来的性能,暂时没找到替代的方法。。。
 74     /* 正确排重
 75     if ( Array.hasOwnProperty('from') ) {
 76         return Array.from(new Set(arr))
 77     }else{
 78         var r = [], NaNBol = true
 79         for(var i=0; i < arr.length; i++) {
 80             if (arr[i] !== arr[i]) {
 81                 if (NaNBol && r.indexOf(arr[i]) === -1) {
 82                     r.push(arr[i])
 83                     NaNBol = false
 84                 }
 85             }else{
 86                 if(r.indexOf(arr[i]) === -1) r.push(arr[i])
 87             }
 88         }
 89         return r
 90     }
 91 
 92      */
 93 }
 94 
 95 
 96 /*求两个集合的并集*/
 97 union (a, b) {
 98     var newArr = a.concat(b);
 99     return this.unique(newArr);
100 }
101 
102 /*求两个集合的交集*/
103 intersect (a, b) {
104     var _this = this;
105     a = this.unique(a);
106     return this.map(a, function(o) {
107         return _this.contains(b, o) ? o : null;
108     });
109 }
110 
111 /*删除其中一个元素*/
112 remove (arr, ele) {
113     var index = arr.indexOf(ele);
114     if(index > -1) {
115         arr.splice(index, 1);
116     }
117     return arr;
118 }
119 
120 /*将类数组转换为数组的方法*/
121 formArray (ary) {
122     var arr = [];
123     if(Array.isArray(ary)) {
124         arr = ary;
125     } else {
126         arr = Array.prototype.slice.call(ary);
127     };
128     return arr;
129 }
130 
131 /*最大值*/
132 max (arr) {
133     return Math.max.apply(null, arr);
134 }
135 
136 /*最小值*/
137 min (arr) {
138     return Math.min.apply(null, arr);
139 }
140 
141 /*求和*/
142 sum (arr) {
143     return arr.reduce( (pre, cur) => {
144         return pre + cur
145     })
146 }
147 
148 /*平均值*/
149 average (arr) {
150     return this.sum(arr)/arr.length
151 }

4. String 字符串操作

 1 /**
 2  * 去除空格
 3  * @param  {str}
 4  * @param  {type} 
 5  *       type:  1-所有空格  2-前后空格  3-前空格 4-后空格
 6  * @return {String}
 7  */
 8 trim (str, type) {
 9     type = type || 1
10     switch (type) {
11         case 1:
12             return str.replace(/\s+/g, "");
13         case 2:
14             return str.replace(/(^\s*)|(\s*$)/g, "");
15         case 3:
16             return str.replace(/(^\s*)/g, "");
17         case 4:
18             return str.replace(/(\s*$)/g, "");
19         default:
20             return str;
21     }
22 }
23 
24 /**
25  * @param  {str} 
26  * @param  {type}
27  *       type:  1:首字母大写  2:首页母小写  3:大小写转换  4:全部大写  5:全部小写
28  * @return {String}
29  */
30 changeCase (str, type) {
31     type = type || 4
32     switch (type) {
33         case 1:
34             return str.replace(/\b\w+\b/g, function (word) {
35                 return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
36 
37             });
38         case 2:
39             return str.replace(/\b\w+\b/g, function (word) {
40                 return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase();
41             });
42         case 3:
43             return str.split('').map( function(word){
44                 if (/[a-z]/.test(word)) {
45                     return word.toUpperCase();
46                 }else{
47                     return word.toLowerCase()
48                 }
49             }).join('')
50         case 4:
51             return str.toUpperCase();
52         case 5:
53             return str.toLowerCase();
54         default:
55             return str;
56     }
57 }
58 
59 
60 /*
61     检测密码强度
62 */
63 checkPwd (str) {
64     var Lv = 0;
65     if (str.length < 6) {
66         return Lv
67     }
68     if (/[0-9]/.test(str)) {
69         Lv++
70     }
71     if (/[a-z]/.test(str)) {
72         Lv++
73     }
74     if (/[A-Z]/.test(str)) {
75         Lv++
76     }
77     if (/[\.|-|_]/.test(str)) {
78         Lv++
79     }
80     return Lv;
81 }
82 
83 /*过滤html代码(把<>转换)*/
84 filterTag (str) {
85     str = str.replace(/&/ig, "&amp;");
86     str = str.replace(/</ig, "&lt;");
87     str = str.replace(/>/ig, "&gt;");
88     str = str.replace(" ", "&nbsp;");
89     return str;
90 }

5. Number

/*随机数范围*/
random (min, max) {
    if (arguments.length === 2) {
        return Math.floor(min + Math.random() * ( (max+1) - min ))
    }else{
        return null;
    }
    
}

/*将阿拉伯数字翻译成中文的大写数字*/
numberToChinese (num) {
    var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十");
    var BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
    var a = ("" + num).replace(/(^0*)/g, "").split("."),
        k = 0,
        re = "";
    for(var i = a[0].length - 1; i >= 0; i--) {
        switch(k) {
            case 0:
                re = BB[7] + re;
                break;
            case 4:
                if(!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$")
                    .test(a[0]))
                    re = BB[4] + re;
                break;
            case 8:
                re = BB[5] + re;
                BB[7] = BB[5];
                k = 0;
                break;
        }
        if(k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0)
            re = AA[0] + re;
        if(a[0].charAt(i) != 0)
            re = AA[a[0].charAt(i)] + BB[k % 4] + re;
        k++;
    }

    if(a.length > 1) // 加上小数部分(如果有小数部分)
    {
        re += BB[6];
        for(var i = 0; i < a[1].length; i++)
            re += AA[a[1].charAt(i)];
    }
    if(re == '一十')
        re = "十";
    if(re.match(/^一/) && re.length == 3)
        re = re.replace("一", "");
    return re;
}

/*将数字转换为大写金额*/
changeToChinese (Num) {
        //判断如果传递进来的不是字符的话转换为字符
        if(typeof Num == "number") {
            Num = new String(Num);
        };
        Num = Num.replace(/,/g, "") //替换tomoney()中的“,”
        Num = Num.replace(/ /g, "") //替换tomoney()中的空格
        Num = Num.replace(/¥/g, "") //替换掉可能出现的¥字符
        if(isNaN(Num)) { //验证输入的字符是否为数字
            //alert("请检查小写金额是否正确");
            return "";
        };
        //字符处理完毕后开始转换,采用前后两部分分别转换
        var part = String(Num).split(".");
        var newchar = "";
        //小数点前进行转化
        for(var i = part[0].length - 1; i >= 0; i--) {
            if(part[0].length > 10) {
                return "";
                //若数量超过拾亿单位,提示
            }
            var tmpnewchar = ""
            var perchar = part[0].charAt(i);
            switch(perchar) {
                case "0":
                    tmpnewchar = "零" + tmpnewchar;
                    break;
                case "1":
                    tmpnewchar = "壹" + tmpnewchar;
                    break;
                case "2":
                    tmpnewchar = "贰" + tmpnewchar;
                    break;
                case "3":
                    tmpnewchar = "叁" + tmpnewchar;
                    break;
                case "4":
                    tmpnewchar = "肆" + tmpnewchar;
                    break;
                case "5":
                    tmpnewchar = "伍" + tmpnewchar;
                    break;
                case "6":
                    tmpnewchar = "陆" + tmpnewchar;
                    break;
                case "7":
                    tmpnewchar = "柒" + tmpnewchar;
                    break;
                case "8":
                    tmpnewchar = "捌" + tmpnewchar;
                    break;
                case "9":
                    tmpnewchar = "玖" + tmpnewchar;
                    break;
            }
            switch(part[0].length - i - 1) {
                case 0:
                    tmpnewchar = tmpnewchar + "元";
                    break;
                case 1:
                    if(perchar != 0) tmpnewchar = tmpnewchar + "拾";
                    break;
                case 2:
                    if(perchar != 0) tmpnewchar = tmpnewchar + "佰";
                    break;
                case 3:
                    if(perchar != 0) tmpnewchar = tmpnewchar + "仟";
                    break;
                case 4:
                    tmpnewchar = tmpnewchar + "万";
                    break;
                case 5:
                    if(perchar != 0) tmpnewchar = tmpnewchar + "拾";
                    break;
                case 6:
                    if(perchar != 0) tmpnewchar = tmpnewchar + "佰";
                    break;
                case 7:
                    if(perchar != 0) tmpnewchar = tmpnewchar + "仟";
                    break;
                case 8:
                    tmpnewchar = tmpnewchar + "亿";
                    break;
                case 9:
                    tmpnewchar = tmpnewchar + "拾";
                    break;
            }
            var newchar = tmpnewchar + newchar;
        }
        //小数点之后进行转化
        if(Num.indexOf(".") != -1) {
            if(part[1].length > 2) {
                // alert("小数点之后只能保留两位,系统将自动截断");
                part[1] = part[1].substr(0, 2)
            }
            for(i = 0; i < part[1].length; i++) {
                tmpnewchar = ""
                perchar = part[1].charAt(i)
                switch(perchar) {
                    case "0":
                        tmpnewchar = "零" + tmpnewchar;
                        break;
                    case "1":
                        tmpnewchar = "壹" + tmpnewchar;
                        break;
                    case "2":
                        tmpnewchar = "贰" + tmpnewchar;
                        break;
                    case "3":
                        tmpnewchar = "叁" + tmpnewchar;
                        break;
                    case "4":
                        tmpnewchar = "肆" + tmpnewchar;
                        break;
                    case "5":
                        tmpnewchar = "伍" + tmpnewchar;
                        break;
                    case "6":
                        tmpnewchar = "陆" + tmpnewchar;
                        break;
                    case "7":
                        tmpnewchar = "柒" + tmpnewchar;
                        break;
                    case "8":
                        tmpnewchar = "捌" + tmpnewchar;
                        break;
                    case "9":
                        tmpnewchar = "玖" + tmpnewchar;
                        break;
                }
                if(i == 0) tmpnewchar = tmpnewchar + "角";
                if(i == 1) tmpnewchar = tmpnewchar + "分";
                newchar = newchar + tmpnewchar;
            }
        }
        //替换所有无用汉字
        while(newchar.search("零零") != -1)
            newchar = newchar.replace("零零", "零");
        newchar = newchar.replace("零亿", "亿");
        newchar = newchar.replace("亿万", "亿");
        newchar = newchar.replace("零万", "万");
        newchar = newchar.replace("零元", "元");
        newchar = newchar.replace("零角", "");
        newchar = newchar.replace("零分", "");
        if(newchar.charAt(newchar.length - 1) == "元") {
            newchar = newchar + "整"
        }
        return newchar;
    }

6. Http请求(ajax)

  1 /**
  2  * @param  {setting}
  3  */
  4 ajax(setting){
  5     //设置参数的初始值
  6     var opts={
  7         method: (setting.method || "GET").toUpperCase(), //请求方式
  8         url: setting.url || "", // 请求地址
  9         async: setting.async || true, // 是否异步
 10         dataType: setting.dataType || "json", // 解析方式
 11         data: setting.data || "", // 参数
 12         success: setting.success || function(){}, // 请求成功回调
 13         error: setting.error || function(){} // 请求失败回调
 14     }
 15 
 16     // 参数格式化
 17     function params_format (obj) {
 18         var str = ''
 19         for (var i in obj) {
 20             str += i + '=' + obj[i] + '&'
 21         }
 22         return str.split('').slice(0, -1).join('')
 23     }
 24 
 25     // 创建ajax对象
 26     var xhr=new XMLHttpRequest();
 27 
 28     // 连接服务器open(方法GET/POST,请求地址, 异步传输)
 29     if(opts.method == 'GET'){
 30         xhr.open(opts.method, opts.url + "?" + params_format(opts.data), opts.async);
 31         xhr.send();
 32     }else{
 33         xhr.open(opts.method, opts.url, opts.async);
 34         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 35         xhr.send(opts.data);
 36     }
 37     
 38     /*
 39     ** 每当readyState改变时,就会触发onreadystatechange事件
 40     ** readyState属性存储有XMLHttpRequest的状态信息
 41     ** 0 :请求未初始化
 42     ** 1 :服务器连接已建立
 43     ** 2 :请求已接受
 44     ** 3 : 请求处理中
 45     ** 4 :请求已完成,且相应就绪
 46     */
 47     xhr.onreadystatechange = function() {
 48         if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 304)) {
 49             switch(opts.dataType){
 50                 case "json":
 51                     var json = JSON.parse(xhr.responseText);
 52                     opts.success(json);
 53                     break;
 54                 case "xml":
 55                     opts.success(xhr.responseXML);
 56                     break;
 57                 default:
 58                     opts.success(xhr.responseText);
 59                     break;
 60             }
 61         }
 62     }
 63 
 64     xhr.onerror = function(err) {
 65         opts.error(err);
 66     }
 67 }
 68 
 69 /**
 70  * @param  {url}
 71  * @param  {setting}
 72  * @return {Promise}
 73  */
 74 fetch(url, setting) {
 75     //设置参数的初始值
 76     let opts={
 77         method: (setting.method || 'GET').toUpperCase(), //请求方式
 78         headers : setting.headers  || {}, // 请求头设置
 79         credentials : setting.credentials  || true, // 设置cookie是否一起发送
 80         body: setting.body || {},
 81         mode : setting.mode  || 'no-cors', // 可以设置 cors, no-cors, same-origin
 82         redirect : setting.redirect  || 'follow', // follow, error, manual
 83         cache : setting.cache  || 'default' // 设置 cache 模式 (default, reload, no-cache)
 84     }
 85     let dataType = setting.dataType || "json", // 解析方式  
 86         data = setting.data || "" // 参数
 87 
 88     // 参数格式化
 89     function params_format (obj) {
 90         var str = ''
 91         for (var i in obj) {
 92             str += `${i}=${obj[i]}&`
 93         }
 94         return str.split('').slice(0, -1).join('')
 95     }
 96 
 97     if (opts.method === 'GET') {
 98         url = url + (data?`?${params_format(data)}`:'')
 99     }else{
100         setting.body = data || {}
101     }
102 
103     return new Promise( (resolve, reject) => {
104         fetch(url, opts).then( async res => {
105             let data = dataType === 'text' ? await res.text() :
106                 dataType === 'blob' ? await res.blob() : await res.json() 
107             resolve(data)
108         }).catch( e => {
109             reject(e)
110         })
111     })
112     
113 }

7. DOM

 1 /*获取兄弟节点*/
 2 siblings (ele) {
 3     console.log(ele.parentNode)
 4     var chid = ele.parentNode.children,eleMatch = []; 
 5     for(var i = 0, len = chid.length; i < len; i ++){ 
 6         if(chid[i] != ele){ 
 7             eleMatch.push(chid[i]); 
 8         } 
 9     } 
10     return eleMatch;
11 }
12 
13 /*获取行间样式属性*/
14 getByStyle (obj,name){
15     if(obj.currentStyle){
16         return  obj.currentStyle[name];
17     }else{
18         return  getComputedStyle(obj,false)[name];
19     }
20 }

8. Storage 储存操作

  1 class StorageFn {
  2     constructor () {
  3         this.ls = window.localStorage;
  4         this.ss = window.sessionStorage;
  5     }
  6 
  7     /*-----------------cookie---------------------*/
  8     /*设置cookie*/
  9     setCookie (name, value, day) {
 10         var setting = arguments[0];
 11         if (Object.prototype.toString.call(setting).slice(8, -1) === 'Object'){
 12             for (var i in setting) {
 13                 var oDate = new Date();
 14                 oDate.setDate(oDate.getDate() + day);
 15                 document.cookie = i + '=' + setting[i] + ';expires=' + oDate;
 16             }
 17         }else{
 18             var oDate = new Date();
 19             oDate.setDate(oDate.getDate() + day);
 20             document.cookie = name + '=' + value + ';expires=' + oDate;
 21         }
 22         
 23     }
 24 
 25     /*获取cookie*/
 26     getCookie (name) {
 27         var arr = document.cookie.split('; ');
 28         for (var i = 0; i < arr.length; i++) {
 29             var arr2 = arr[i].split('=');
 30             if (arr2[0] == name) {
 31                 return arr2[1];
 32             }
 33         }
 34         return '';
 35     }
 36 
 37     /*删除cookie*/
 38     removeCookie (name) {
 39         this.setCookie(name, 1, -1);
 40     }
 41 
 42 
 43     /*-----------------localStorage---------------------*/
 44     /*设置localStorage*/
 45     setLocal(key, val) {
 46         var setting = arguments[0];
 47         if (Object.prototype.toString.call(setting).slice(8, -1) === 'Object'){
 48             for(var i in setting){
 49                 this.ls.setItem(i, JSON.stringify(setting[i]))
 50             }
 51         }else{
 52             this.ls.setItem(key, JSON.stringify(val))
 53         }
 54         
 55     }
 56 
 57     /*获取localStorage*/
 58     getLocal(key) {
 59         if (key) return JSON.parse(this.ls.getItem(key))
 60         return null;
 61         
 62     }
 63 
 64     /*移除localStorage*/
 65     removeLocal(key) {
 66         this.ls.removeItem(key)
 67     }
 68 
 69     /*移除所有localStorage*/
 70     clearLocal() {
 71         this.ls.clear()
 72     }
 73 
 74 
 75     /*-----------------sessionStorage---------------------*/
 76     /*设置sessionStorage*/
 77     setSession(key, val) {
 78         var setting = arguments[0];
 79         if (Object.prototype.toString.call(setting).slice(8, -1) === 'Object'){
 80             for(var i in setting){
 81                 this.ss.setItem(i, JSON.stringify(setting[i]))
 82             }
 83         }else{
 84             this.ss.setItem(key, JSON.stringify(val))
 85         }
 86         
 87     }
 88 
 89     /*获取sessionStorage*/
 90     getSession(key) {
 91         if (key) return JSON.parse(this.ss.getItem(key))
 92         return null;
 93         
 94     }
 95 
 96     /*移除sessionStorage*/
 97     removeSession(key) {
 98         this.ss.removeItem(key)
 99     }
100 
101     /*移除所有sessionStorage*/
102     clearSession() {
103         this.ss.clear()
104     }
105 
106     
107 }

9. URL地址连接以及Other 其它操作

  1 /*获取网址参数*/
  2 getURL(name){
  3     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
  4     var r = window.location.search.substr(1).match(reg);
  5     if(r!=null) return  r[2]; return null;
  6 }
  7 
  8 /*获取全部url参数,并转换成json对象*/
  9 getUrlAllParams (url) {
 10     var url = url ? url : window.location.href;
 11     var _pa = url.substring(url.indexOf('?') + 1),
 12         _arrS = _pa.split('&'),
 13         _rs = {};
 14     for (var i = 0, _len = _arrS.length; i < _len; i++) {
 15         var pos = _arrS[i].indexOf('=');
 16         if (pos == -1) {
 17             continue;
 18         }
 19         var name = _arrS[i].substring(0, pos),
 20             value = window.decodeURIComponent(_arrS[i].substring(pos + 1));
 21         _rs[name] = value;
 22     }
 23     return _rs;
 24 }
 25 
 26 /*删除url指定参数,返回url*/
 27 delParamsUrl(url, name){
 28     var baseUrl = url.split('?')[0] + '?';
 29     var query = url.split('?')[1];
 30     if (query.indexOf(name)>-1) {
 31         var obj = {}
 32         var arr = query.split("&");
 33         for (var i = 0; i < arr.length; i++) {
 34             arr[i] = arr[i].split("=");
 35             obj[arr[i][0]] = arr[i][1];
 36         };
 37         delete obj[name];
 38         var url = baseUrl + JSON.stringify(obj).replace(/[\"\{\}]/g,"").replace(/\:/g,"=").replace(/\,/g,"&");
 39         return url
 40     }else{
 41         return url;
 42     }
 43 }
 44 
 45 /*获取十六进制随机颜色*/
 46 getRandomColor () {
 47     return '#' + (function(h) {
 48         return new Array(7 - h.length).join("0") + h;
 49     })((Math.random() * 0x1000000 << 0).toString(16));
 50 }
 51 
 52 /*图片加载*/
 53 imgLoadAll(arr,callback){
 54     var arrImg = []; 
 55     for (var i = 0; i < arr.length; i++) {
 56         var img = new Image();
 57         img.src = arr[i];
 58         img.onload = function(){
 59             arrImg.push(this);
 60             if (arrImg.length == arr.length) {
 61                 callback && callback();
 62             }
 63         }
 64     }
 65 }
 66 
 67 /*音频加载*/
 68 loadAudio(src, callback) {
 69     var audio = new Audio(src);
 70     audio.onloadedmetadata = callback;
 71     audio.src = src;
 72 }
 73 
 74 /*DOM转字符串*/
 75 domToStirng(htmlDOM){
 76     var div= document.createElement("div");
 77     div.appendChild(htmlDOM);
 78     return div.innerHTML
 79 }
 80 
 81 /*字符串转DOM*/
 82 stringToDom(htmlString){
 83     var div= document.createElement("div");
 84     div.innerHTML=htmlString;
 85     return div.children[0];
 86 }
 87 
 88 
 89 /**
 90  * 光标所在位置插入字符,并设置光标位置
 91  * 
 92  * @param {dom} 输入框
 93  * @param {val} 插入的值
 94  * @param {posLen} 光标位置处在 插入的值的哪个位置
 95  */
 96 setCursorPosition (dom,val,posLen) {
 97     var cursorPosition = 0;
 98     if(dom.selectionStart){
 99         cursorPosition = dom.selectionStart;
100     }
101     this.insertAtCursor(dom,val);
102     dom.focus();
103     console.log(posLen)
104     dom.setSelectionRange(dom.value.length,cursorPosition + (posLen || val.length));
105 }
106 
107 /*光标所在位置插入字符*/
108 insertAtCursor(dom, val) {
109     if (document.selection){
110         dom.focus();
111         sel = document.selection.createRange();
112         sel.text = val;
113         sel.select();
114     }else if (dom.selectionStart || dom.selectionStart == '0'){
115         let startPos = dom.selectionStart;
116         let endPos = dom.selectionEnd;
117         let restoreTop = dom.scrollTop;
118         dom.value = dom.value.substring(0, startPos) + val + dom.value.substring(endPos, dom.value.length);
119         if (restoreTop > 0){
120             dom.scrollTop = restoreTop;
121         }
122         dom.focus();
123         dom.selectionStart = startPos + val.length;
124         dom.selectionEnd = startPos + val.length;
125     } else {
126         dom.value += val;
127         dom.focus();
128     }
129 }
  1 //HTML5 DOM 选择器
  2 
  3 // querySelector() 返回匹配到的第一个元素
  4 var item = document.querySelector('.item');
  5 console.log(item);
  6 
  7 // querySelectorAll() 返回匹配到的所有元素,是一个nodeList集合
  8 var items = document.querySelectorAll('.item');
  9 console.log(items[0]);
 10 //阻止默认行为
 11 
 12 // 原生js
 13 document.getElementById('btn').addEventListener('click', function (event) {
 14     event = event || window.event;
 15 
 16     if (event.preventDefault){
 17         // w3c方法 阻止默认行为
 18         event.preventDefault();
 19     } else{
 20         // ie 阻止默认行为
 21         event.returnValue = false;
 22     }
 23 }, false);
 24 
 25 // jQuery
 26 $('#btn').on('click', function (event) {
 27     event.preventDefault();
 28 });
 29 //阻止冒泡
 30 
 31 // 原生js
 32 document.getElementById('btn').addEventListener('click', function (event) {
 33     event = event || window.event;
 34 
 35     if (event.stopPropagation){
 36         // w3c方法 阻止冒泡
 37         event.stopPropagation();
 38     } else{
 39         // ie 阻止冒泡
 40         event.cancelBubble = true;
 41     }
 42 }, false);
 43 
 44 // jQuery
 45 $('#btn').on('click', function (event) {
 46     event.stopPropagation();
 47 });
 48 //鼠标滚轮事件
 49 
 50 $('#content').on("mousewheel DOMMouseScroll", function (event) { 
 51     // chrome & ie || // firefox
 52     var delta = (event.originalEvent.wheelDelta && (event.originalEvent.wheelDelta > 0 ? 1 : -1)) || (event.originalEvent.detail && (event.originalEvent.detail > 0 ? -1 : 1));  
 53     
 54     if (delta > 0) { 
 55         // 向上滚动
 56         console.log('mousewheel top');
 57     } else if (delta < 0) {
 58         // 向下滚动
 59         console.log('mousewheel bottom');
 60     } 
 61 });
 62 //检测浏览器是否支持svg
 63 
 64 function isSupportSVG() { 
 65     var SVG_NS = 'http://www.w3.org/2000/svg';
 66     return !!document.createElementNS &&!!document.createElementNS(SVG_NS, 'svg').createSVGRect; 
 67 } 
 68 
 69 // 测试
 70 console.log(isSupportSVG());
 71 检测浏览器是否支持canvas
 72 
 73 function isSupportCanvas() {
 74     if(document.createElement('canvas').getContext){
 75         return true;
 76     }else{
 77         return false;
 78     }
 79 }
 80 
 81 // 测试,打开谷歌浏览器控制台查看结果
 82 console.log(isSupportCanvas());
 83 //检测是否是微信浏览器
 84 
 85 function isWeiXinClient() {
 86     var ua = navigator.userAgent.toLowerCase(); 
 87     if (ua.match(/MicroMessenger/i)=="micromessenger") { 
 88         return true; 
 89     } else { 
 90         return false; 
 91     }
 92 }
 93 
 94 // 测试
 95 alert(isWeiXinClient());
 96 jQuery 获取鼠标在图片上的坐标
 97 
 98 $('#myImage').click(function(event){
 99     //获取鼠标在图片上的坐标 
100     console.log('X:' + event.offsetX+'\n Y:' + event.offsetY); 
101     
102     //获取元素相对于页面的坐标 
103     console.log('X:'+$(this).offset().left+'\n Y:'+$(this).offset().top);
104 });
105 //验证码倒计时代码
106 
107 <!-- dom -->
108 <input id="send" type="button" value="发送验证码">// 原生js版本
109 var times = 60, // 临时设为60秒
110     timer = null;
111             
112 document.getElementById('send').onclick = function () {
113     // 计时开始
114     timer = setInterval(function () {
115         times--;
116         
117         if (times <= 0) {
118             send.value = '发送验证码';
119             clearInterval(timer);
120             send.disabled = false;
121             times = 60;
122         } else {
123             send.value = times + '秒后重试';
124             send.disabled = true;
125         }
126     }, 1000);
127 }
128 // jQuery版本
129 var times = 60,
130     timer = null;
131 
132 $('#send').on('click', function () {
133     var $this = $(this);
134     
135     // 计时开始
136     timer = setInterval(function () {
137         times--;
138         
139         if (times <= 0) {
140             $this.val('发送验证码');
141             clearInterval(timer);
142             $this.attr('disabled', false);
143             times = 60;
144         } else {
145             $this.val(times + '秒后重试');
146             $this.attr('disabled', true);
147         }
148     }, 1000);
149 });
150 //常用的一些正则表达式
151 
152 //匹配字母、数字、中文字符 
153 /^([A-Za-z0-9]|[\u4e00-\u9fa5])*$/ 
154 
155 //验证邮箱 
156 /^\w+@([0-9a-zA-Z]+[.])+[a-z]{2,4}$/ 
157 
158 //验证手机号 
159 /^1[3|5|8|7]\d{9}$/ 
160 
161 //验证URL 
162 /^http:\/\/.+\./
163 
164 //验证身份证号码 
165 /(^\d{15}$)|(^\d{17}([0-9]|X|x)$)/ 
166 
167 //匹配中文字符的正则表达式 
168 /[\u4e00-\u9fa5]/ 
169 
170 //匹配双字节字符(包括汉字在内) 
171 /[^\x00-\xff]/
172 //js时间戳、毫秒格式化 上面好像已经有了
173 
174 function formatDate(now) { 
175     var y = now.getFullYear();
176     var m = now.getMonth() + 1; // 注意js里的月要加1 
177     var d = now.getDate();
178     var h = now.getHours(); 
179     var m = now.getMinutes(); 
180     var s = now.getSeconds();
181     
182     return y + "-" + m + "-" + d + " " + h + ":" + m + ":" + s; 
183 } 
184 
185 var nowDate = new Date(1442978789184);
186 
187 alert(formatDate(nowDate));
188 //js判断是否移动端及浏览器内核
189 
190 var browser = { 
191     versions: function() { 
192         var u = navigator.userAgent; 
193         return { 
194             trident: u.indexOf('Trident') > -1, //IE内核 
195             presto: u.indexOf('Presto') > -1, //opera内核 
196             webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 
197             gecko: u.indexOf('Firefox') > -1, //火狐内核Gecko 
198             mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端 
199             ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios 
200             android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android 
201             iPhone: u.indexOf('iPhone') > -1 , //iPhone 
202             iPad: u.indexOf('iPad') > -1, //iPad 
203             webApp: u.indexOf('Safari') > -1 //Safari 
204         }; 
205     }
206 } 
207 
208 if (browser.versions.mobile() || browser.versions.ios() || browser.versions.android() || browser.versions.iPhone() || browser.versions.iPad()) { 
209     alert('移动端'); 
210 }
211 //HTML5全屏
212 
213 function fullscreen(element) {
214     if (element.requestFullscreen) {
215         element.requestFullscreen();
216     } else if (element.mozRequestFullScreen) {
217         element.mozRequestFullScreen();
218     } else if (element.webkitRequestFullscreen) {
219         element.webkitRequestFullscreen();
220     } else if (element.msRequestFullscreen) {
221         element.msRequestFullscreen();
222     }
223 }
224 
225 fullscreen(document.documentElement);

后续有待更新。。。

猜你喜欢

转载自www.cnblogs.com/MrHaoRoot/p/10364382.html
今日推荐