javaScript字符串工具类StringUtils详解

StringUtils = {
isEmpty: function(input) {
return input == null || input == ‘’;
},
isNotEmpty: function(input) {
return !this.isEmpty(input);
},
isBlank: function(input) {
return input == null || /^\s*KaTeX parse error: Expected 'EOF', got '}' at position 19: …est(input); }̲, isNotBlank…/, ‘’);
},
trimToEmpty: function(input) {
return input == null ? “” : this.trim(input);
},
startsWith: function(input, prefix) {
return input.indexOf(prefix) === 0;
},
endsWith: function(input, suffix) {
return input.lastIndexOf(suffix) === 0;
},
contains: function(input, searchSeq) {
return input.indexOf(searchSeq) >= 0;
},
equals: function(input1, input2) {
return input1 == input2;
},
equalsIgnoreCase: function(input1, input2) {
return input1.toLocaleLowerCase() == input2.toLocaleLowerCase();
},
containsWhitespace: function(input) {
return this.contains(input, ’ ');
},
//生成指定个数的字符
repeat: function(ch, repeatTimes) {
var result = “”;
for(var i = 0; i < repeatTimes; i++) {
result += ch;
}
return result;
},
deleteWhitespace: function(input) {
return input.replace(/\s+/g, ‘’);
},
rightPad: function(input, size, padStr) {
return input + this.repeat(padStr, size);
},
leftPad: function(input, size, padStr) {
return this.repeat(padStr, size) + input;
},
//首小写字母转大写
capitalize: function(input) {
var strLen = 0;
if(input == null || (strLen = input.length) == 0) {
return input;
}
return input.replace(/1/, function(matchStr) {
return matchStr.toLocaleUpperCase();
});
},
//首大写字母转小写
uncapitalize: function(input) {
var strLen = 0;
if(input == null || (strLen = input.length) == 0) {
return input;
}
return input.replace(/2/, function(matchStr) {
return matchStr.toLocaleLowerCase();
});
},
//大写转小写,小写转大写
swapCase: function(input) {
return input.replace(/[a-z]/ig, function(matchStr) {
if(matchStr >= ‘A’ && matchStr <= ‘Z’) {
return matchStr.toLocaleLowerCase();
} else if(matchStr >= ‘a’ && matchStr <= ‘z’) {
return matchStr.toLocaleUpperCase();
}
});
},
//统计含有的子字符串的个数
countMatches: function(input, sub) {
if(this.isEmpty(input) || this.isEmpty(sub)) {
return 0;
}
var count = 0;
var index = 0;
while((index = input.indexOf(sub, index)) != -1) {
index += sub.length;
count++;
}
return count;
},
//只包含字母
isAlpha: function(input) {
return /3+KaTeX parse error: Expected 'EOF', got '}' at position 20: …est(input); }̲, //只包含字母、空格…/i.test(input);
},
//只包含字母、数字
isAlphanumeric: function(input) {
return /4+KaTeX parse error: Expected 'EOF', got '}' at position 20: …est(input); }̲, //只包含字母、数字…/i.test(input);
},
//数字
isNumeric: function(input) {
return /^(?:[1-9]\d*|0)(?:.\d+)?KaTeX parse error: Expected 'EOF', got '}' at position 19: …est(input); }̲, //小数 is…/.test(input);
},
//负小数
isNegativeDecimal: function(input) {
return /^-?(?:0|[1-9]\d*).\d+KaTeX parse error: Expected 'EOF', got '}' at position 19: …est(input); }̲, //正小数 i…/.test(input);
},
//整数
isInteger: function(input) {
return /5?(?:0|[1-9]\d*)KaTeX parse error: Expected 'EOF', got '}' at position 19: …est(input); }̲, //正整数 i…/.test(input);
},
//负整数
isNegativeInteger: function(input) {
return /^-?(?:0|[1-9]\d*)KaTeX parse error: Expected 'EOF', got '}' at position 19: …est(input); }̲, //只包含数字和空格…/.test(input);
},
isWhitespace: function(input) {
return /^\s*KaTeX parse error: Expected 'EOF', got '}' at position 19: …est(input); }̲, isAllLower…/.test(input);
},
isAllUpperCase: function(input) {
return /6+KaTeX parse error: Expected 'EOF', got '}' at position 19: …est(input); }̲, defaultStr…/.test(input);
},
/**

  • 校验时排除某些字符串,即不能包含某些字符串
  • @param {Object} conditions:里面有多个属性,如下:
  • @param {String} matcherFlag 匹配标识
  • 0:数字;1:字母;2:小写字母;3:大写字母;4:特殊字符,指英文状态下的标点符号及括号等;5:中文;
  • 6:数字和字母;7:数字和小写字母;8:数字和大写字母;9:数字、字母和特殊字符;10:数字和中文;
  • 11:小写字母和特殊字符;12:大写字母和特殊字符;13:字母和特殊字符;14:小写字母和中文;15:大写字母和中文;
  • 16:字母和中文;17:特殊字符、和中文;18:特殊字符、字母和中文;19:特殊字符、小写字母和中文;20:特殊字符、大写字母和中文;
  • 100:所有字符;
  • @param {Array} excludeStrArr 排除的字符串,数组格式
  • @param {String} length 长度,可为空。1,2表示长度1到2之间;10,表示10个以上字符;5表示长度为5
  • @param {Boolean} ignoreCase 是否忽略大小写
  • conditions={matcherFlag:“0”,excludeStrArr:[],length:"",ignoreCase:true}
    /
    isPatternMustExcludeSomeStr: function(input, conditions) {
    //参数
    var matcherFlag = conditions.matcherFlag;
    var excludeStrArr = conditions.excludeStrArr;
    var length = conditions.length;
    var ignoreCase = conditions.ignoreCase;
    //拼正则
    var size = excludeStrArr.length;
    var regex = (size == 0) ? “^” : "^(?!.
    (?:{0}))";
    var subPattern = “”;
    for(var i = 0; i < size; i++) {
    excludeStrArr[i] = Bee.StringUtils.escapeMetacharacterOfStr(excludeStrArr[i]);
    subPattern += excludeStrArr[i];
    if(i != size - 1) {
    subPattern += “|”;
    }
    }
    regex = this.format(regex, [subPattern]);
    switch(matcherFlag) {
    case ‘0’:
    regex += “\d”;
    break;
    case ‘1’:
    regex += “[a-zA-Z]”;
    break;
    case ‘2’:
    regex += “[a-z]”;
    break;
    case ‘3’:
    regex += “[A-Z]”;
    break;
    case ‘4’:
    regex += “[!-/😡[-{-~]"; break; case '5': regex += "[\u4E00-\u9FA5]"; break; case '6': regex += "[a-zA-Z0-9]"; break; case '7': regex += "[a-z0-9]"; break; case '8': regex += "[A-Z0-9]"; break; case '9': regex += "[!-~]"; break; case '10': regex += "[0-9\u4E00-\u9FA5]"; break; case '11': regex += "[a-z!-/:-@\[-{-~]”;
    break;
    case ‘12’:
    regex += “[A-Z!-/😡[-{-~]"; break; case '13': regex += "[a-zA-Z!-/:-@\[-{-~]”;
    break;
    case ‘14’:
    regex += “[a-z\u4E00-\u9FA5]”;
    break;
    case ‘15’:
    regex += “[A-Z\u4E00-\u9FA5]”;
    break;
    case ‘16’:
    regex += “[a-zA-Z\u4E00-\u9FA5]”;
    break;
    case ‘17’:
    regex += “[\u4E00-\u9FA5!-/😡[-{-~]"; break; case '18': regex += "[\u4E00-\u9FA5!-~]"; break; case '19': regex += "[a-z\u4E00-\u9FA5!-/:-@\[-{-~]”;
    break;
    case ‘20’:
    regex += “[A-Z\u4E00-\u9FA5!-/😡[-`{-~]”;
    break;
    case ‘100’:
    regex += “[\s\S]”;
    break;
    default:
    alert(matcherFlag + “:This type is not supported!”);
    }
    regex += this.isNotBlank(length) ? “{” + length + “}” : “+”;
    regex += “$”;
    var pattern = new RegExp(regex, ignoreCase ? “i” : “”);
    return pattern.test(input);
    },
    /**
  • @param {String} message
  • @param {Array} arr
  • 消息格式化
    /
    format: function(message, arr) {
    return message.replace(/{(\d+)}/g, function(matchStr, group1) {
    return arr[group1];
    });
    },
    /
    *
  • 把连续出现多次的字母字符串进行压缩。如输入:aaabbbbcccccd 输出:3a4b5cd
  • @param {String} input
  • @param {Boolean} ignoreCase : true or false
    /
    compressRepeatedStr: function(input, ignoreCase) {
    var pattern = new RegExp("([a-z])\1+", ignoreCase ? “ig” : “g”);
    return result = input.replace(pattern, function(matchStr, group1) {
    return matchStr.length + group1;
    });
    },
    /
    *
  • 校验必须同时包含某些字符串
  • @param {String} input
  • @param {Object} conditions:里面有多个属性,如下:
  • @param {String} matcherFlag 匹配标识
  • 0:数字;1:字母;2:小写字母;3:大写字母;4:特殊字符,指英文状态下的标点符号及括号等;5:中文;
  • 6:数字和字母;7:数字和小写字母;8:数字和大写字母;9:数字、字母和特殊字符;10:数字和中文;
  • 11:小写字母和特殊字符;12:大写字母和特殊字符;13:字母和特殊字符;14:小写字母和中文;15:大写字母和中文;
  • 16:字母和中文;17:特殊字符、和中文;18:特殊字符、字母和中文;19:特殊字符、小写字母和中文;20:特殊字符、大写字母和中文;
  • 100:所有字符;
  • @param {Array} excludeStrArr 排除的字符串,数组格式
  • @param {String} length 长度,可为空。1,2表示长度1到2之间;10,表示10个以上字符;5表示长度为5
  • @param {Boolean} ignoreCase 是否忽略大小写
  • conditions={matcherFlag:“0”,containStrArr:[],length:"",ignoreCase:true}

/
isPatternMustContainSomeStr: function(input, conditions) {
//参数
var matcherFlag = conditions.matcherFlag;
var containStrArr = conditions.containStrArr;
var length = conditions.length;
var ignoreCase = conditions.ignoreCase;
//创建正则
var size = containStrArr.length;
var regex = “^”;
var subPattern = “”;
for(var i = 0; i < size; i++) {
containStrArr[i] = Bee.StringUtils.escapeMetacharacterOfStr(containStrArr[i]);
subPattern += "(?=.
" + containStrArr[i] + “)”;
}
regex += subPattern;
switch(matcherFlag) {
case ‘0’:
regex += “\d”;
break;
case ‘1’:
regex += “[a-zA-Z]”;
break;
case ‘2’:
regex += “[a-z]”;
break;
case ‘3’:
regex += “[A-Z]”;
break;
case ‘4’:
regex += “[!-/😡[-{-~]"; break; case '5': regex += "[\u4E00-\u9FA5]"; break; case '6': regex += "[a-zA-Z0-9]"; break; case '7': regex += "[a-z0-9]"; break; case '8': regex += "[A-Z0-9]"; break; case '9': regex += "[!-~]"; break; case '10': regex += "[0-9\u4E00-\u9FA5]"; break; case '11': regex += "[a-z!-/:-@\[-{-~]”;
break;
case ‘12’:
regex += “[A-Z!-/😡[-{-~]"; break; case '13': regex += "[a-zA-Z!-/:-@\[-{-~]”;
break;
case ‘14’:
regex += “[a-z\u4E00-\u9FA5]”;
break;
case ‘15’:
regex += “[A-Z\u4E00-\u9FA5]”;
break;
case ‘16’:
regex += “[a-zA-Z\u4E00-\u9FA5]”;
break;
case ‘17’:
regex += “[\u4E00-\u9FA5!-/😡[-{-~]"; break; case '18': regex += "[\u4E00-\u9FA5!-~]"; break; case '19': regex += "[a-z\u4E00-\u9FA5!-/:-@\[-{-~]”;
break;
case ‘20’:
regex += “[A-Z\u4E00-\u9FA5!-/😡[-`{-~]”;
break;
case ‘100’:
regex += “[\s\S]”;
break;
default:
alert(matcherFlag + “:This type is not supported!”);
}
regex += this.isNotBlank(length) ? “{” + length + “}” : “+”;
regex += "KaTeX parse error: Expected 'EOF', got '}' at position 99: …est(input); }̲, //中文校验 …/.test(input);
},
//去掉中文字符
removeChinese: function(input) {
return input.replace(/[\u4E00-\u9FA5]+/gm, “”);
},
//转义元字符
escapeMetacharacter: function(input) {
var metacharacter = “^$()*+.[]|\-?{}|”;
if(metacharacter.indexOf(input) >= 0) {
input = “\” + input;
}
return input;
},
//转义字符串中的元字符
escapeMetacharacterOfStr: function(input) {
return input.replace(/[^$*+.
|\-?{}|]/gm, “\$&”);
}

};


参考链接
https://blog.csdn.net/qq_21386275/article/details/82620668?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242

**

JavaScript
**

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 == undefined || o == null || o == ‘null’ || o == ‘undefined’ || o == 0 || o == false || o == NaN) return true
return false
}

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

isIos () {
var u = navigator.userAgent;
if (u.indexOf(‘Android’) > -1 || u.indexOf(‘Linux’) > -1) {//安卓手机
// return “Android”;
return false
} else if (u.indexOf(‘iPhone’) > -1) {//苹果手机
// return “iPhone”;
return true
} else if (u.indexOf(‘iPad’) > -1) {//iPad
// return “iPad”;
return false
} else if (u.indexOf(‘Windows Phone’) > -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 < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}

browserType(){
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isOpera = userAgent.indexOf(“Opera”) > -1; //判断是否Opera浏览器
var isIE = userAgent.indexOf(“compatible”) > -1 && userAgent.indexOf(“MSIE”) > -1 && !isOpera; //判断是否IE浏览器
var isEdge = userAgent.indexOf(“Edge”) > -1; //判断是否IE的Edge浏览器
var isFF = userAgent.indexOf(“Firefox”) > -1; //判断是否Firefox浏览器
var isSafari = userAgent.indexOf(“Safari”) > -1 && userAgent.indexOf(“Chrome”) == -1; //判断是否Safari浏览器
var isChrome = userAgent.indexOf(“Chrome”) > -1 && userAgent.indexOf(“Safari”) > -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|6|7|8][0-9]{9}KaTeX parse error: Undefined control sequence: \d at position 66: … return /^(0\̲d̲{2,3}-\d{7,8})(…/.test(str);
case ‘card’: //身份证
return /(\d{15}$)|(^\d{18}$)|(\d{17}(\d|X|x)KaTeX parse error: Undefined control sequence: \w at position 102: …turn /^[a-zA-Z]\̲w̲{5,17}/.test(str)
case ‘postal’: //邮政编码
return /[1-9]\d{5}(?!\d)/.test(str);
case ‘QQ’: //QQ号
return /7[0-9]{4,9}KaTeX parse error: Undefined control sequence: \w at position 65: … return /^[\̲w̲-]+(\.[\w-]+)*@…/.test(str);
case ‘money’: //金额(小数点2位)
return /^\d*(?:.\d{0,2})?KaTeX parse error: Undefined control sequence: \/ at position 80: …ttp|ftp|https):\̲/̲\/[\w\-_]+(\.[\…/.test(str) || /^(\d{4})-(\d{2})-(\d{2}) / . t e s t ( s t r ) c a s e ′ n u m b e r ′ : / / 数 字 r e t u r n / [ 0 − 9 ] /.test(str) case 'number': //数字 return /^[0-9] /.test(str)casenumber://return/[09]/.test(str);
case ‘english’: //英文
return /8+KaTeX parse error: Can't use function '\u' in math mode at position 65: … return /^[\̲u̲4E00-\u9FA5]+/.test(str);
case ‘lower’: //小写
return /9+ / . t e s t ( s t r ) ; c a s e ′ u p p e r ′ : / / 大 写 r e t u r n / [ A − Z ] + /.test(str); case 'upper': //大写 return /^[A-Z]+ /.test(str);caseupper://return/[AZ]+/.test(str);
case ‘HTML’: //HTML标记
return /<("["]*"|’[’]’|[^’">])>/.test(str);
default:
return true;
}
}

// 严格的身份证校验
isCardID(sId) {
if (!/(^\d{15}KaTeX parse error: Undefined control sequence: \d at position 5: )|(^\̲d̲{17}(\d|X|x))/.test(sId)) {
alert(‘你输入的身份证长度或格式错误’)
return false
}
//身份证城市
var aCity={11:“北京”,12:“天津”,13:“河北”,14:“山西”,15:“内蒙古”,21:“辽宁”,22:“吉林”,23:“黑龙江”,31:“上海”,32:“江苏”,33:“浙江”,34:“安徽”,35:“福建”,36:“江西”,37:“山东”,41:“河南”,42:“湖北”,43:“湖南”,44:“广东”,45:“广西”,46:“海南”,50:“重庆”,51:“四川”,52:“贵州”,53:“云南”,54:“西藏”,61:“陕西”,62:“甘肃”,63:“青海”,64:“宁夏”,65:“新疆”,71:“台湾”,81:“香港”,82:“澳门”,91:“国外”};
if(!aCity[parseInt(sId.substr(0,2))]) {
alert(‘你的身份证地区非法’)
return false
}

// 出生日期验证
var sBirthday=(sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2))).replace(/-/g,"/"),
    d = new Date(sBirthday)
if(sBirthday != (d.getFullYear()+"/"+ (d.getMonth()+1) + "/" + d.getDate())) {
    alert('身份证上的出生日期非法')
    return false
}

// 身份证号码校验
var sum = 0,
    weights =  [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
    codes = "10X98765432"
for (var i = 0; i < sId.length - 1; i++) {
    sum += sId[i] * weights[i];
}
var last = codes[sum % 11]; //计算出来的最后一位身份证号码
if (sId[sId.length-1] != last) { 
    alert('你输入的身份证号非法')
    return false
}

return true

}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
Date
/**

  • 格式化时间

  • @param {time} 时间

  • @param {cFormat} 格式

  • @return {String} 字符串

  • @example formatTime(‘2018-1-29’, ‘{y}/{m}/{d} {h}:{i}:{s}’) // -> 2018/01/29 00:00:00
    */
    formatTime(time, cFormat) {
    if (arguments.length === 0) return null
    if ((time + ‘’).length === 10) {
    time = +time * 1000
    }

    var format = cFormat || ‘{y}-{m}-{d} {h}:{i}:{s}’, date
    if (typeof time === ‘object’) {
    date = time
    } else {
    date = new Date(time)
    }

    var formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
    }
    var time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    var value = formatObj[key]
    if (key === ‘a’) return [‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’, ‘日’][value - 1]
    if (result.length > 0 && value < 10) {
    value = ‘0’ + value
    }
    return value || 0
    })
    return time_str
    }

/**

  • 返回指定长度的月份集合
  • @param {time} 时间
  • @param {len} 长度
  • @param {direction} 方向: 1: 前几个月; 2: 后几个月; 3:前后几个月 默认 3
  • @return {Array} 数组
  • @example getMonths(‘2018-1-29’, 6, 1) // -> [“2018-1”, “2017-12”, “2017-11”, “2017-10”, “2017-9”, “2017-8”, “2017-7”]
    */
    getMonths(time, len, direction) {
    var mm = new Date(time).getMonth(),
    yy = new Date(time).getFullYear(),
    direction = isNaN(direction) ? 3 : direction,
    index = mm;
    var cutMonth = function(index) {
    if ( index <= len && index >= -len) {
    return direction === 1 ? formatPre(index).concat(cutMonth(++index)):
    direction === 2 ? formatNext(index).concat(cutMonth(++index)):formatCurr(index).concat(cutMonth(++index))
    }
    return []
    }
    var formatNext = function(i) {
    var y = Math.floor(i/12),
    m = i%12
    return [yy+y + ‘-’ + (m+1)]
    }
    var formatPre = function(i) {
    var y = Math.ceil(i/12),
    m = i%12
    m = m=0 ? 12 : m
    return [yy-y + ‘-’ + (13 - m)]
    }
    var formatCurr = function(i) {
    var y = Math.floor(i/12),
    yNext = Math.ceil(i/12),
    m = i%12,
    mNext = m
    =0 ? 12 : m
    return [yy-yNext + ‘-’ + (13 - mNext),yy+y + ‘-’ + (m+1)]
    }
    // 数组去重
    var unique = function(arr) {
    if ( Array.hasOwnProperty(‘from’) ) {
    return Array.from(new Set(arr));
    }else{
    var n = {},r=[];
    for(var i = 0; i < arr.length; i++){
    if (!n[arr[i]]){
    n[arr[i]] = true;
    r.push(arr[i]);
    }
    }
    return r;
    }
    }
    return direction !== 3 ? cutMonth(index) : unique(cutMonth(index).sort(function(t1, t2){
    return new Date(t1).getTime() - new Date(t2).getTime()
    }))
    }

/**

  • 返回指定长度的天数集合
  • @param {time} 时间
  • @param {len} 长度
  • @param {direction} 方向: 1: 前几天; 2: 后几天; 3:前后几天 默认 3
  • @return {Array} 数组
  • @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”]
    */
    getDays(time, len, diretion) {
    var tt = new Date(time)
    var getDay = function(day) {
    var t = new Date(time)
    t.setDate(t.getDate() + day)
    var m = t.getMonth()+1
    return t.getFullYear()+’-’+m+’-’+t.getDate()
    }
    var arr = []
    if (diretion === 1) {
    for (var i = 1; i <= len; i++) {
    arr.unshift(getDay(-i))
    }
    }else if(diretion === 2) {
    for (var i = 1; i <= len; i++) {
    arr.push(getDay(i))
    }
    }else {
    for (var i = 1; i <= len; i++) {
    arr.unshift(getDay(-i))
    }
    arr.push(tt.getFullYear()+’-’+(tt.getMonth()+1)+’-’+tt.getDate())
    for (var i = 1; i <= len; i++) {
    arr.push(getDay(i))
    }
    }
    return diretion === 1 ? arr.concat([tt.getFullYear()+’-’+(tt.getMonth()+1)+’-’+tt.getDate()]) :
    diretion === 2 ? [tt.getFullYear()+’-’+(tt.getMonth()+1)+’-’+tt.getDate()].concat(arr) : arr
    }

/**

  • @param {s} 秒数
  • @return {String} 字符串
  • @example formatHMS(3610) // -> 1h0m10s
    */
    formatHMS (s) {
    var str = ‘’
    if (s > 3600) {
    str = Math.floor(s/3600)+‘h’+Math.floor(s%3600/60)+‘m’+s%60+‘s’
    }else if(s > 60) {
    str = Math.floor(s/60)+‘m’+s%60+‘s’
    }else{
    str = s%60+‘s’
    }
    return str
    }

/获取某月有多少天/
getMonthOfDay (time) {
var date = new Date(time)
var year = date.getFullYear()
var mouth = date.getMonth() + 1
var days

//当月份为二月时,根据闰年还是非闰年判断天数
if (mouth == 2) {
    days = year % 4 == 0 ? 29 : 28
} else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
    //月份为:1,3,5,7,8,10,12 时,为大月.则天数为31;
    days = 31
} else {
    //其他月份,天数为:30.
    days = 30
}
return days

}

/获取某年有多少天/
getYearOfDay (time) {
var firstDayYear = this.getFirstDayOfYear(time);
var lastDayYear = this.getLastDayOfYear(time);
var numSecond = (new Date(lastDayYear).getTime() - new Date(firstDayYear).getTime())/1000;
return Math.ceil(numSecond/(24*3600));
}

/获取某年的第一天/
getFirstDayOfYear (time) {
var year = new Date(time).getFullYear();
return year + “-01-01 00:00:00”;
}

/获取某年最后一天/
getLastDayOfYear (time) {
var year = new Date(time).getFullYear();
var dateString = year + “-12-01 00:00:00”;
var endDay = this.getMonthOfDay(dateString);
return year + “-12-” + endDay + " 23:59:59";
}

/获取某个日期是当年中的第几天/
getDayOfYear (time) {
var firstDayYear = this.getFirstDayOfYear(time);
var numSecond = (new Date(time).getTime() - new Date(firstDayYear).getTime())/1000;
return Math.ceil(numSecond/(24*3600));
}

/获取某个日期在这一年的第几周/
getDayOfYearWeek (time) {
var numdays = this.getDayOfYear(time);
return Math.ceil(numdays / 7);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
Array
/判断一个元素是否在数组中/
contains (arr, val) {
return arr.indexOf(val) != -1 ? true : false;
}

/**

  • @param {arr} 数组
  • @param {fn} 回调函数
  • @return {undefined}
    */
    each (arr, fn) {
    fn = fn || Function;
    var a = [];
    var args = Array.prototype.slice.call(arguments, 1);
    for(var i = 0; i < arr.length; i++) {
    var res = fn.apply(arr, [arr[i], i].concat(args));
    if(res != null) a.push(res);
    }
    }

/**

  • @param {arr} 数组
  • @param {fn} 回调函数
  • @param {thisObj} this指向
  • @return {Array}
    */
    map (arr, fn, thisObj) {
    var scope = thisObj || window;
    var a = [];
    for(var i = 0, j = arr.length; i < j; ++i) {
    var res = fn.call(scope, arr[i], i, this);
    if(res != null) a.push(res);
    }
    return a;
    }

/**

  • @param {arr} 数组
  • @param {type} 1:从小到大 2:从大到小 3:随机
  • @return {Array}
    */
    sort (arr, type = 1) {
    return arr.sort( (a, b) => {
    switch(type) {
    case 1:
    return a - b;
    case 2:
    return b - a;
    case 3:
    return Math.random() - 0.5;
    default:
    return arr;
    }
    })
    }

/去重/
unique (arr) {
if ( Array.hasOwnProperty(‘from’) ) {
return Array.from(new Set(arr));
}else{
var n = {},r=[];
for(var i = 0; i < arr.length; i++){
if (!n[arr[i]]){
n[arr[i]] = true;
r.push(arr[i]);
}
}
return r;
}
}

/求两个集合的并集/
union (a, b) {
var newArr = a.concat(b);
return this.unique(newArr);
}

/求两个集合的交集/
intersect (a, b) {
var _this = this;
a = this.unique(a);
return this.map(a, function(o) {
return _this.contains(b, o) ? o : null;
});
}

/删除其中一个元素/
remove (arr, ele) {
var index = arr.indexOf(ele);
if(index > -1) {
arr.splice(index, 1);
}
return arr;
}

/将类数组转换为数组的方法/
formArray (ary) {
var arr = [];
if(Array.isArray(ary)) {
arr = ary;
} else {
arr = Array.prototype.slice.call(ary);
};
return arr;
}

/最大值/
max (arr) {
return Math.max.apply(null, arr);
}

/最小值/
min (arr) {
return Math.min.apply(null, arr);
}

/求和/
sum (arr) {
return arr.reduce( (pre, cur) => {
return pre + cur
})
}

/平均值/
average (arr) {
return this.sum(arr)/arr.length
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
String 字符串操作
/**

  • 去除空格
  • @param {str}
  • @param {type}
  •   type:  1-所有空格  2-前后空格  3-前空格 4-后空格
    
  • @return {String}
    /
    trim (str, type) {
    type = type || 1
    switch (type) {
    case 1:
    return str.replace(/\s+/g, “”);
    case 2:
    return str.replace(/(^\s
    )|(\s*KaTeX parse error: Undefined control sequence: \s at position 55: …str.replace(/(^\̲s̲*)/g, ""); …)/g, “”);
    default:
    return str;
    }
    }

/**

  • @param {str}

  • @param {type}

  •   type:  1:首字母大写  2:首页母小写  3:大小写转换  4:全部大写  5:全部小写
    
  • @return {String}
    */
    changeCase (str, type) {
    type = type || 4
    switch (type) {
    case 1:
    return str.replace(/\b\w+\b/g, function (word) {
    return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();

         });
     case 2:
         return str.replace(/\b\w+\b/g, function (word) {
             return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase();
         });
     case 3:
         return str.split('').map( function(word){
             if (/[a-z]/.test(word)) {
                 return word.toUpperCase();
             }else{
                 return word.toLowerCase()
             }
         }).join('')
     case 4:
         return str.toUpperCase();
     case 5:
         return str.toLowerCase();
     default:
         return str;
    

    }
    }

/*
检测密码强度
*/
checkPwd (str) {
var Lv = 0;
if (str.length < 6) {
return Lv
}
if (/[0-9]/.test(str)) {
Lv++
}
if (/[a-z]/.test(str)) {
Lv++
}
if (/[A-Z]/.test(str)) {
Lv++
}
if (/[.|-|_]/.test(str)) {
Lv++
}
return Lv;
}

/过滤html代码(把<>转换)/
filterTag (str) {
str = str.replace(/&/ig, “&”);
str = str.replace(/</ig, “<”);
str = str.replace(/>/ig, “>”);
str = str.replace(" ", " ");
return str;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
Http
/**

  • @param {setting}
    */
    ajax(setting){
    //设置参数的初始值
    var opts={
    method: (setting.method || “GET”).toUpperCase(), //请求方式
    url: setting.url || “”, // 请求地址
    async: setting.async || true, // 是否异步
    dataType: setting.dataType || “json”, // 解析方式
    data: setting.data || “”, // 参数
    success: setting.success || function(){}, // 请求成功回调
    error: setting.error || function(){} // 请求失败回调
    }

    // 参数格式化
    function params_format (obj) {
    var str = ‘’
    for (var i in obj) {
    str += i + ‘=’ + obj[i] + ‘&’
    }
    return str.split(’’).slice(0, -1).join(’’)
    }

    // 创建ajax对象
    var xhr=new XMLHttpRequest();

    // 连接服务器open(方法GET/POST,请求地址, 异步传输)
    if(opts.method == ‘GET’){
    xhr.open(opts.method, opts.url + “?” + params_format(opts.data), opts.async);
    xhr.send();
    }else{
    xhr.open(opts.method, opts.url, opts.async);
    xhr.setRequestHeader(“Content-Type”,“application/x-www-form-urlencoded”);
    xhr.send(opts.data);
    }

    /*
    ** 每当readyState改变时,就会触发onreadystatechange事件
    ** readyState属性存储有XMLHttpRequest的状态信息
    ** 0 :请求未初始化
    ** 1 :服务器连接已建立
    ** 2 :请求已接受
    ** 3 : 请求处理中
    ** 4 :请求已完成,且相应就绪
    */
    xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 304)) {
    switch(opts.dataType){
    case “json”:
    var json = JSON.parse(xhr.responseText);
    opts.success(json);
    break;
    case “xml”:
    opts.success(xhr.responseXML);
    break;
    default:
    opts.success(xhr.responseText);
    break;
    }
    }
    }

    xhr.onerror = function(err) {
    opts.error(err);
    }
    }

/**

  • @param {url}

  • @param {setting}

  • @return {Promise}
    */
    fetch(url, setting) {
    //设置参数的初始值
    let opts={
    method: (setting.method || ‘GET’).toUpperCase(), //请求方式
    headers : setting.headers || {}, // 请求头设置
    credentials : setting.credentials || true, // 设置cookie是否一起发送
    body: setting.body || {},
    mode : setting.mode || ‘no-cors’, // 可以设置 cors, no-cors, same-origin
    redirect : setting.redirect || ‘follow’, // follow, error, manual
    cache : setting.cache || ‘default’ // 设置 cache 模式 (default, reload, no-cache)
    }
    let dataType = setting.dataType || “json”, // 解析方式
    data = setting.data || “” // 参数

    // 参数格式化
    function params_format (obj) {
    var str = ‘’
    for (var i in obj) {
    str += ${i}=${obj[i]}&
    }
    return str.split(’’).slice(0, -1).join(’’)
    }

    if (opts.method === ‘GET’) {
    url = url + (data??${params_format(data)}:’’)
    }else{
    setting.body = data || {}
    }

    return new Promise( (resolve, reject) => {
    fetch(url, opts).then( async res => {
    let data = dataType === ‘text’ ? await res.text() :
    dataType === ‘blob’ ? await res.blob() : await res.json()
    resolve(data)
    }).catch( e => {
    reject(e)
    })
    })

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
DOM
$ (selector){
var type = selector.substring(0, 1);
if (type === ‘#’) {
if (document.querySelecotor) return document.querySelector(selector)
return document.getElementById(selector.substring(1))

}else if (type === '.') {
    if (document.querySelecotorAll) return document.querySelectorAll(selector)
        return document.getElementsByClassName(selector.substring(1))
}else{
    return document['querySelectorAll' ? 'querySelectorAll':'getElementsByTagName'](selector)
}

}

/检测类名/
hasClass (ele, name) {
return ele.className.match(new RegExp(’(\s|^)’ + name + ‘(\s|$)’));
}

/添加类名/
addClass (ele, name) {
if (!this.hasClass(ele, name)) ele.className += " " + name;
}

/删除类名/
removeClass (ele, name) {
if (this.hasClass(ele, name)) {
var reg = new RegExp(’(\s|^)’ + name + ‘(\s|$)’);
ele.className = ele.className.replace(reg, ‘’);
}
}

/替换类名/
replaceClass (ele, newName, oldName) {
this.removeClass(ele, oldName);
this.addClass(ele, newName);
}

/获取兄弟节点/
siblings (ele) {
console.log(ele.parentNode)
var chid = ele.parentNode.children,eleMatch = [];
for(var i = 0, len = chid.length; i < len; i ++){
if(chid[i] != ele){
eleMatch.push(chid[i]);
}
}
return eleMatch;
}

/获取行间样式属性/
getByStyle (obj,name){
if(obj.currentStyle){
return obj.currentStyle[name];
}else{
return getComputedStyle(obj,false)[name];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Storage 储存操作
class StorageFn {
constructor () {
this.ls = window.localStorage;
this.ss = window.sessionStorage;
}

/*-----------------cookie---------------------*/
/*设置cookie*/
setCookie (name, value, day) {
    var setting = arguments[0];
    if (Object.prototype.toString.call(setting).slice(8, -1) === 'Object'){
        for (var i in setting) {
            var oDate = new Date();
            oDate.setDate(oDate.getDate() + day);
            document.cookie = i + '=' + setting[i] + ';expires=' + oDate;
        }
    }else{
        var oDate = new Date();
        oDate.setDate(oDate.getDate() + day);
        document.cookie = name + '=' + value + ';expires=' + oDate;
    }

}

/*获取cookie*/
getCookie (name) {
    var arr = document.cookie.split('; ');
    for (var i = 0; i < arr.length; i++) {
        var arr2 = arr[i].split('=');
        if (arr2[0] == name) {
            return arr2[1];
        }
    }
    return '';
}

/*删除cookie*/
removeCookie (name) {
    this.setCookie(name, 1, -1);
}


/*-----------------localStorage---------------------*/
/*设置localStorage*/
setLocal(key, val) {
    var setting = arguments[0];
    if (Object.prototype.toString.call(setting).slice(8, -1) === 'Object'){
        for(var i in setting){
            this.ls.setItem(i, JSON.stringify(setting[i]))
        }
    }else{
        this.ls.setItem(key, JSON.stringify(val))
    }

}

/*获取localStorage*/
getLocal(key) {
    if (key) return JSON.parse(this.ls.getItem(key))
    return null;

}

/*移除localStorage*/
removeLocal(key) {
    this.ls.removeItem(key)
}

/*移除所有localStorage*/
clearLocal() {
    this.ls.clear()
}


/*-----------------sessionStorage---------------------*/
/*设置sessionStorage*/
setSession(key, val) {
    var setting = arguments[0];
    if (Object.prototype.toString.call(setting).slice(8, -1) === 'Object'){
        for(var i in setting){
            this.ss.setItem(i, JSON.stringify(setting[i]))
        }
    }else{
        this.ss.setItem(key, JSON.stringify(val))
    }

}

/*获取sessionStorage*/
getSession(key) {
    if (key) return JSON.parse(this.ss.getItem(key))
    return null;

}

/*移除sessionStorage*/
removeSession(key) {
    this.ss.removeItem(key)
}

/*移除所有sessionStorage*/
clearSession() {
    this.ss.clear()
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Other 其它操作
/获取网址参数/
getURL(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null) return r[2]; return null;
}

/获取全部url参数,并转换成json对象/
getUrlAllParams (url) {
var url = url ? url : window.location.href;
var _pa = url.substring(url.indexOf(’?’) + 1),
_arrS = _pa.split(’&’),
_rs = {};
for (var i = 0, _len = _arrS.length; i < _len; i++) {
var pos = _arrS[i].indexOf(’=’);
if (pos == -1) {
continue;
}
var name = _arrS[i].substring(0, pos),
value = window.decodeURIComponent(_arrS[i].substring(pos + 1));
_rs[name] = value;
}
return _rs;
}

/删除url指定参数,返回url/
delParamsUrl(url, name){
var baseUrl = url.split(’?’)[0] + ‘?’;
var query = url.split(’?’)[1];
if (query.indexOf(name)>-1) {
var obj = {}
var arr = query.split("&");
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i].split("=");
obj[arr[i][0]] = arr[i][1];
};
delete obj[name];
var url = baseUrl + JSON.stringify(obj).replace(/["{}]/g,"").replace(/:/g,"=").replace(/,/g,"&");
return url
}else{
return url;
}
}

/获取十六进制随机颜色/
getRandomColor () {
return ‘#’ + (function(h) {
return new Array(7 - h.length).join(“0”) + h;
})((Math.random() * 0x1000000 << 0).toString(16));
}

/图片加载/
imgLoadAll(arr,callback){
var arrImg = [];
for (var i = 0; i < arr.length; i++) {
var img = new Image();
img.src = arr[i];
img.onload = function(){
arrImg.push(this);
if (arrImg.length == arr.length) {
callback && callback();
}
}
}
}

/音频加载/
loadAudio(src, callback) {
var audio = new Audio(src);
audio.onloadedmetadata = callback;
audio.src = src;
}

/DOM转字符串/
domToStirng(htmlDOM){
var div= document.createElement(“div”);
div.appendChild(htmlDOM);
return div.innerHTML
}

/字符串转DOM/
stringToDom(htmlString){
var div= document.createElement(“div”);
div.innerHTML=htmlString;
return div.children[0];
}

/**

  • 光标所在位置插入字符,并设置光标位置
  • @param {dom} 输入框
  • @param {val} 插入的值
  • @param {posLen} 光标位置处在 插入的值的哪个位置
    */
    setCursorPosition (dom,val,posLen) {
    var cursorPosition = 0;
    if(dom.selectionStart){
    cursorPosition = dom.selectionStart;
    }
    this.insertAtCursor(dom,val);
    dom.focus();
    console.log(posLen)
    dom.setSelectionRange(dom.value.length,cursorPosition + (posLen || val.length));
    }

/光标所在位置插入字符/
insertAtCursor(dom, val) {
if (document.selection){
dom.focus();
sel = document.selection.createRange();
sel.text = val;
sel.select();
}else if (dom.selectionStart || dom.selectionStart == ‘0’){
let startPos = dom.selectionStart;
let endPos = dom.selectionEnd;
let restoreTop = dom.scrollTop;
dom.value = dom.value.substring(0, startPos) + val + dom.value.substring(endPos, dom.value.length);
if (restoreTop > 0){
dom.scrollTop = restoreTop;
}
dom.focus();
dom.selectionStart = startPos + val.length;
dom.selectionEnd = startPos + val.length;
} else {
dom.value += val;
dom.focus();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
CSS
pc-reset PC样式初始化
/* normalize.css */

html {
line-height: 1.15;
/* 1 /
-ms-text-size-adjust: 100%;
/
2 /
-webkit-text-size-adjust: 100%;
/
2 */
}

body {
margin: 0;
}

article,
aside,
footer,
header,
nav,
section {
display: block;
}

h1 {
font-size: 2em;
margin: 0.67em 0;
}

figcaption,
figure,
main {
/* 1 */
display: block;
}

figure {
margin: 1em 40px;
}

hr {
box-sizing: content-box;
/* 1 /
height: 0;
/
1 /
overflow: visible;
/
2 */
}

pre {
font-family: monospace, monospace;
/* 1 /
font-size: 1em;
/
2 */
}

a {
background-color: transparent;
/* 1 /
-webkit-text-decoration-skip: objects;
/
2 */
}

abbr[title] {
border-bottom: none;
/* 1 /
text-decoration: underline;
/
2 /
text-decoration: underline dotted;
/
2 */
}

b,
strong {
font-weight: inherit;
}

b,
strong {
font-weight: bolder;
}

code,
kbd,
samp {
font-family: monospace, monospace;
/* 1 /
font-size: 1em;
/
2 */
}

dfn {
font-style: italic;
}

mark {
background-color: #ff0;
color: #000;
}

small {
font-size: 80%;
}

sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}

sub {
bottom: -0.25em;
}

sup {
top: -0.5em;
}

audio,
video {
display: inline-block;
}

audio:not([controls]) {
display: none;
height: 0;
}

img {
border-style: none;
}

svg:not(:root) {
overflow: hidden;
}

button,
input,
optgroup,
select,
textarea {
font-family: sans-serif;
/* 1 /
font-size: 100%;
/
1 /
line-height: 1.15;
/
1 /
margin: 0;
/
2 */
}

button,
input {
/* 1 */
overflow: visible;
}

button,
select {
/* 1 */
text-transform: none;
}

button,
html [type=“button”],

/* 1 */

[type=“reset”],
[type=“submit”] {
-webkit-appearance: button;
/* 2 */
}

button::-moz-focus-inner,
[type=“button”]::-moz-focus-inner,
[type=“reset”]::-moz-focus-inner,
[type=“submit”]::-moz-focus-inner {
border-style: none;
padding: 0;
}

button:-moz-focusring,
[type=“button”]:-moz-focusring,
[type=“reset”]:-moz-focusring,
[type=“submit”]:-moz-focusring {
outline: 1px dotted ButtonText;
}

fieldset {
padding: 0.35em 0.75em 0.625em;
}

legend {
box-sizing: border-box;
/* 1 /
color: inherit;
/
2 /
display: table;
/
1 /
max-width: 100%;
/
1 /
padding: 0;
/
3 /
white-space: normal;
/
1 */
}

progress {
display: inline-block;
/* 1 /
vertical-align: baseline;
/
2 */
}

textarea {
overflow: auto;
}

[type=“checkbox”],
[type=“radio”] {
box-sizing: border-box;
/* 1 /
padding: 0;
/
2 */
}

type=“number”::-webkit-outer-spin-button {
height: auto;
}

type=“search” {
-webkit-appearance: textfield;
/* 1 /
outline-offset: -2px;
/
2 */
}

type=“search”::-webkit-search-decoration {
-webkit-appearance: none;
}

::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 /
font: inherit;
/
2 */
}

details,

/* 1 */

menu {
display: block;
}

summary {
display: list-item;
}

canvas {
display: inline-block;
}

template {
display: none;
}

[hidden] {
display: none;
}

/* reset */

html,
body,
h1,
h2,
h3,
h4,
h5,
h6,
div,
dl,
dt,
dd,
ul,
ol,
li,
p,
blockquote,
pre,
hr,
figure,
table,
caption,
th,
td,
form,
fieldset,
legend,
input,
button,
textarea,
menu {
margin: 0;
padding: 0;
box-sizing: border-box;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
Phone-reset
/* normalize.css */

html {
line-height: 1.15;
/* 1 /
-ms-text-size-adjust: 100%;
/
2 /
-webkit-text-size-adjust: 100%;
/
2 */
}

body {
margin: 0;
}

article,
aside,
footer,
header,
nav,
section {
display: block;
}

h1 {
font-size: 2em;
margin: 0.67em 0;
}

figcaption,
figure,
main {
/* 1 */
display: block;
}

figure {
margin: 1em 40px;
}

hr {
box-sizing: content-box;
/* 1 /
height: 0;
/
1 /
overflow: visible;
/
2 */
}

pre {
font-family: monospace, monospace;
/* 1 /
font-size: 1em;
/
2 */
}

a {
background-color: transparent;
/* 1 /
-webkit-text-decoration-skip: objects;
/
2 */
}

abbr[title] {
border-bottom: none;
/* 1 /
text-decoration: underline;
/
2 /
text-decoration: underline dotted;
/
2 */
}

b,
strong {
font-weight: inherit;
}

b,
strong {
font-weight: bolder;
}

code,
kbd,
samp {
font-family: monospace, monospace;
/* 1 /
font-size: 1em;
/
2 */
}

dfn {
font-style: italic;
}

mark {
background-color: #ff0;
color: #000;
}

small {
font-size: 80%;
}

sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}

sub {
bottom: -0.25em;
}

sup {
top: -0.5em;
}

audio,
video {
display: inline-block;
}

audio:not([controls]) {
display: none;
height: 0;
}

img {
border-style: none;
}

svg:not(:root) {
overflow: hidden;
}

button,
input,
optgroup,
select,
textarea {
font-family: sans-serif;
/* 1 /
font-size: 100%;
/
1 /
line-height: 1.15;
/
1 /
margin: 0;
/
2 */
}

button,
input {
/* 1 */
overflow: visible;
}

button,
select {
/* 1 */
text-transform: none;
}

button,
html [type=“button”],

/* 1 */

[type=“reset”],
[type=“submit”] {
-webkit-appearance: button;
/* 2 */
}

button::-moz-focus-inner,
[type=“button”]::-moz-focus-inner,
[type=“reset”]::-moz-focus-inner,
[type=“submit”]::-moz-focus-inner {
border-style: none;
padding: 0;
}

button:-moz-focusring,
[type=“button”]:-moz-focusring,
[type=“reset”]:-moz-focusring,
[type=“submit”]:-moz-focusring {
outline: 1px dotted ButtonText;
}

fieldset {
padding: 0.35em 0.75em 0.625em;
}

legend {
box-sizing: border-box;
/* 1 /
color: inherit;
/
2 /
display: table;
/
1 /
max-width: 100%;
/
1 /
padding: 0;
/
3 /
white-space: normal;
/
1 */
}

progress {
display: inline-block;
/* 1 /
vertical-align: baseline;
/
2 */
}

textarea {
overflow: auto;
}

[type=“checkbox”],
[type=“radio”] {
box-sizing: border-box;
/* 1 /
padding: 0;
/
2 */
}

type=“number”::-webkit-outer-spin-button {
height: auto;
}

type=“search” {
-webkit-appearance: textfield;
/* 1 /
outline-offset: -2px;
/
2 */
}

type=“search”::-webkit-search-decoration {
-webkit-appearance: none;
}

::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 /
font: inherit;
/
2 */
}

details,

/* 1 */

menu {
display: block;
}

summary {
display: list-item;
}

canvas {
display: inline-block;
}

template {
display: none;
}

[hidden] {
display: none;
}

/* reset */

html,
body,
h1,
h2,
h3,
h4,
h5,
h6,
div,
dl,
dt,
dd,
ul,
ol,
li,
p,
blockquote,
pre,
hr,
figure,
table,
caption,
th,
td,
form,
fieldset,
legend,
input,
button,
textarea,
menu {
margin: 0;
padding: 0;
box-sizing: border-box;
}

html,
body {
/* 禁止选中文本 */
-webkit-user-select: none;
user-select: none;
font: Oswald, ‘Open Sans’, Helvetica, Arial, sans-serif
}

/* 禁止长按链接与图片弹出菜单 */

a,
img {
-webkit-touch-callout: none;
}

/ios android去除自带阴影的样式/

a,
input {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

input[type=“text”] {
-webkit-appearance: none;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
公共样式提取
/* 禁止选中文本 /
.usn{
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
-o-user-select:none;
user-select:none;
}
/
浮动 */
.fl { float: left; }
.fr { float: right; }
.cf { zoom: 1; }
.cf:after {
content:".";
display:block;
clear:both;
visibility:hidden;
height:0;
overflow:hidden;
}

/* 元素类型 */
.db { display: block; }
.dn { display: none; }
.di { display: inline }
.dib {display: inline-block;}
.transparent { opacity: 0 }

/文字排版、颜色/
.f12 { font-size:12px }
.f14 { font-size:14px }
.f16 { font-size:16px }
.f18 { font-size:18px }
.f20 { font-size:20px }
.fb { font-weight:bold }
.fn { font-weight:normal }
.t2 { text-indent:2em }
.red,a.red { color:#cc0031 }
.darkblue,a.darkblue { color:#039 }
.gray,a.gray { color:#878787 }
.lh150 { line-height:150% }
.lh180 { line-height:180% }
.lh200 { line-height:200% }
.unl { text-decoration:underline; }
.no_unl { text-decoration:none; }
.tl { text-align: left; }
.tc { text-align: center; }
.tr { text-align: right; }
.tj { text-align: justify; text-justify: inter-ideograph; }
.wn { /* 强制不换行 /
word-wrap:normal;
white-space:nowrap;
}
.wb { /
强制换行 /
white-space:normal;
word-wrap:break-word;
word-break:break-all;
}
.wp { /
保持空白序列*/
overflow:hidden;text-align:left;white-space:pre-wrap;word-wrap:break-word;word-break:break-all;
}
.wes { /* 多出部分用省略号表示 , 用于一行 /
overflow:hidden;
word-wrap:normal;
white-space:nowrap;
text-overflow:ellipsis;
}
.wes-2 { /
适用于webkit内核和移动端 */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.wes-3 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
}
.wes-4 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
overflow: hidden;
}

/* 溢出样式 */
.ofh { overflow: hidden; }
.ofs {overflow: scroll; }
.ofa {overflow: auto; }
.ofv {overflow: visible; }

/* 定位方式 */
.ps {position: static; }
.pr {position: relative;zoom:1; }
.pa {position: absolute; }
.pf {position: fixed; }

/* 垂直对齐方式 */
.vt {vertical-align: top; }
.vm {vertical-align: middle; }
.vb {vertical-align: bottom; }

/* 鼠标样式 */
.csd {cursor: default; }
.csp {cursor: pointer; }
.csh {cursor: help; }
.csm {cursor: move; }

/* flex布局 */
.df-sb {
display:flex;
align-items: center;
justify-content: space-between;
}
.df-sa {
display:flex;
align-items: center;
justify-content: space-around;
}

/* 垂直居中 */
.df-c {
display: flex;
align-items: center;
justify-content: center;
}
.tb-c {
text-align:center;
display:table-cell;
vertical-align:middle;
}
.ts-c {
position: absolute;
left: 50%; top: 50%;
transform: translate(-50%, -50%);
}
.ts-mc {
position: absolute;
left: 0;right: 0;
bottom: 0; top: 0;
margin: auto;
}

/* 辅助 */
.mask-fixed-wrapper {
width: 100%;
height: 100%;
position: fixed;
left:0;top:0;
background: rgba(0, 0, 0, 0.65);
z-index: 999;
}
.bg-cover {
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
}
.bg-cover-all {
background-size: 100% 100%;
background-repeat: no-repeat;
background-position: center center;
}


  1. a-z ↩︎

  2. A-Z ↩︎

  3. a-z ↩︎

  4. a-z0-9 ↩︎

  5. -+ ↩︎

  6. A-Z ↩︎

  7. 1-9 ↩︎

  8. a-zA-Z ↩︎

  9. a-z ↩︎

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值