javascript 总结(常用工具类的封装)

迷南。 2021-09-14 15:46 451阅读 0赞

一.javaScript

1. type 类型判断

  1. isString (o) { //是否字符串
  2. return Object.prototype.toString.call(o).slice(8, -1) === 'String'
  3. }
  4. isNumber (o) { //是否数字
  5. return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
  6. }
  7. isObj (o) { //是否对象
  8. return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
  9. }
  10. isArray (o) { //是否数组
  11. return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
  12. }
  13. isDate (o) { //是否时间
  14. return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
  15. }
  16. isBoolean (o) { //是否boolean
  17. return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
  18. }
  19. isFunction (o) { //是否函数
  20. return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
  21. }
  22. isNull (o) { //是否为null
  23. return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
  24. }
  25. isUndefined (o) { //是否undefined
  26. return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
  27. }
  28. isFalse (o) {
  29. if (!o || o === 'null' || o === 'undefined' || o === 'false' || o === 'NaN') return true
  30. return false
  31. }
  32. isTrue (o) {
  33. return !this.isFalse(o)
  34. }
  35. isIos () {
  36. var u = navigator.userAgent;
  37. if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {//安卓手机
  38. // return "Android";
  39. return false
  40. } else if (u.indexOf('iPhone') > -1) {//苹果手机
  41. // return "iPhone";
  42. return true
  43. } else if (u.indexOf('iPad') > -1) {//iPad
  44. // return "iPad";
  45. return false
  46. } else if (u.indexOf('Windows Phone') > -1) {//winphone手机
  47. // return "Windows Phone";
  48. return false
  49. }else{
  50. return false
  51. }
  52. }
  53. isPC () { //是否为PC端
  54. var userAgentInfo = navigator.userAgent;
  55. var Agents = ["Android", "iPhone",
  56. "SymbianOS", "Windows Phone",
  57. "iPad", "iPod"];
  58. var flag = true;
  59. for (var v = 0; v < Agents.length; v++) {
  60. if (userAgentInfo.indexOf(Agents[v]) > 0) {
  61. flag = false;
  62. break;
  63. }
  64. }
  65. return flag;
  66. }
  67. browserType(){
  68. var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  69. var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器
  70. var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器
  71. var isEdge = userAgent.indexOf("Edge") > -1; //判断是否IE的Edge浏览器
  72. var isFF = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器
  73. var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器
  74. var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1; //判断Chrome浏览器
  75. if (isIE) {
  76. var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
  77. reIE.test(userAgent);
  78. var fIEVersion = parseFloat(RegExp["$1"]);
  79. if(fIEVersion == 7) return "IE7"
  80. else if(fIEVersion == 8) return "IE8";
  81. else if(fIEVersion == 9) return "IE9";
  82. else if(fIEVersion == 10) return "IE10";
  83. else if(fIEVersion == 11) return "IE11";
  84. else return "IE7以下"//IE版本过低
  85. }
  86. if (isFF) return "FF";
  87. if (isOpera) return "Opera";
  88. if (isEdge) return "Edge";
  89. if (isSafari) return "Safari";
  90. if (isChrome) return "Chrome";
  91. }
  92. checkStr (str, type) {
  93. switch (type) {
  94. case 'phone': //手机号码
  95. return /^1[3|4|5|7|8][0-9]{9}$/.test(str);
  96. case 'tel': //座机
  97. return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
  98. case 'card': //身份证
  99. return /^\d{15}|\d{18}$/.test(str);
  100. case 'pwd': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
  101. return /^[a-zA-Z]\w{5,17}$/.test(str)
  102. case 'postal': //邮政编码
  103. return /[1-9]\d{5}(?!\d)/.test(str);
  104. case 'QQ': //QQ号
  105. return /^[1-9][0-9]{4,9}$/.test(str);
  106. case 'email': //邮箱
  107. return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
  108. case 'money': //金额(小数点2位)
  109. return /^\d*(?:\.\d{0,2})?$/.test(str);
  110. case 'URL': //网址
  111. return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
  112. case 'IP': //IP
  113. return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
  114. case 'date': //日期时间
  115. 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)
  116. case 'number': //数字
  117. return /^[0-9]$/.test(str);
  118. case 'english': //英文
  119. return /^[a-zA-Z]+$/.test(str);
  120. case 'chinese': //中文
  121. return /^[\u4E00-\u9FA5]+$/.test(str);
  122. case 'lower': //小写
  123. return /^[a-z]+$/.test(str);
  124. case 'upper': //大写
  125. return /^[A-Z]+$/.test(str);
  126. case 'HTML': //HTML标记
  127. return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
  128. default:
  129. return true;
  130. }
  131. }

2. Date

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

3. Array

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

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. * @param {str}
  25. * @param {type}
  26. * type: 1:首字母大写 2:首页母小写 3:大小写转换 4:全部大写 5:全部小写
  27. * @return {String}
  28. */
  29. changeCase (str, type) {
  30. type = type || 4
  31. switch (type) {
  32. case 1:
  33. return str.replace(/\b\w+\b/g, function (word) {
  34. return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
  35. });
  36. case 2:
  37. return str.replace(/\b\w+\b/g, function (word) {
  38. return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase();
  39. });
  40. case 3:
  41. return str.split('').map( function(word){
  42. if (/[a-z]/.test(word)) {
  43. return word.toUpperCase();
  44. }else{
  45. return word.toLowerCase()
  46. }
  47. }).join('')
  48. case 4:
  49. return str.toUpperCase();
  50. case 5:
  51. return str.toLowerCase();
  52. default:
  53. return str;
  54. }
  55. }
  56. /*
  57. 检测密码强度
  58. */
  59. checkPwd (str) {
  60. var Lv = 0;
  61. if (str.length < 6) {
  62. return Lv
  63. }
  64. if (/[0-9]/.test(str)) {
  65. Lv++
  66. }
  67. if (/[a-z]/.test(str)) {
  68. Lv++
  69. }
  70. if (/[A-Z]/.test(str)) {
  71. Lv++
  72. }
  73. if (/[\.|-|_]/.test(str)) {
  74. Lv++
  75. }
  76. return Lv;
  77. }
  78. /*过滤html代码(把<>转换)*/
  79. filterTag (str) {
  80. str = str.replace(/&/ig, "&");
  81. str = str.replace(/</ig, "<");
  82. str = str.replace(/>/ig, ">");
  83. str = str.replace(" ", " ");
  84. return str;
  85. }

5. Number

  1. /*随机数范围*/
  2. random (min, max) {
  3. if (arguments.length === 2) {
  4. return Math.floor(min + Math.random() * ( (max+1) - min ))
  5. }else{
  6. return null;
  7. }
  8. }
  9. /*将阿拉伯数字翻译成中文的大写数字*/
  10. numberToChinese (num) {
  11. var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十");
  12. var BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
  13. var a = ("" + num).replace(/(^0*)/g, "").split("."),
  14. k = 0,
  15. re = "";
  16. for(var i = a[0].length - 1; i >= 0; i--) {
  17. switch(k) {
  18. case 0:
  19. re = BB[7] + re;
  20. break;
  21. case 4:
  22. if(!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$")
  23. .test(a[0]))
  24. re = BB[4] + re;
  25. break;
  26. case 8:
  27. re = BB[5] + re;
  28. BB[7] = BB[5];
  29. k = 0;
  30. break;
  31. }
  32. if(k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0)
  33. re = AA[0] + re;
  34. if(a[0].charAt(i) != 0)
  35. re = AA[a[0].charAt(i)] + BB[k % 4] + re;
  36. k++;
  37. }
  38. if(a.length > 1) // 加上小数部分(如果有小数部分)
  39. {
  40. re += BB[6];
  41. for(var i = 0; i < a[1].length; i++)
  42. re += AA[a[1].charAt(i)];
  43. }
  44. if(re == '一十')
  45. re = "十";
  46. if(re.match(/^一/) && re.length == 3)
  47. re = re.replace("一", "");
  48. return re;
  49. }
  50. /*将数字转换为大写金额*/
  51. changeToChinese (Num) {
  52. //判断如果传递进来的不是字符的话转换为字符
  53. if(typeof Num == "number") {
  54. Num = new String(Num);
  55. };
  56. Num = Num.replace(/,/g, "") //替换tomoney()中的“,”
  57. Num = Num.replace(/ /g, "") //替换tomoney()中的空格
  58. Num = Num.replace(/¥/g, "") //替换掉可能出现的¥字符
  59. if(isNaN(Num)) { //验证输入的字符是否为数字
  60. //alert("请检查小写金额是否正确");
  61. return "";
  62. };
  63. //字符处理完毕后开始转换,采用前后两部分分别转换
  64. var part = String(Num).split(".");
  65. var newchar = "";
  66. //小数点前进行转化
  67. for(var i = part[0].length - 1; i >= 0; i--) {
  68. if(part[0].length > 10) {
  69. return "";
  70. //若数量超过拾亿单位,提示
  71. }
  72. var tmpnewchar = ""
  73. var perchar = part[0].charAt(i);
  74. switch(perchar) {
  75. case "0":
  76. tmpnewchar = "零" + tmpnewchar;
  77. break;
  78. case "1":
  79. tmpnewchar = "壹" + tmpnewchar;
  80. break;
  81. case "2":
  82. tmpnewchar = "贰" + tmpnewchar;
  83. break;
  84. case "3":
  85. tmpnewchar = "叁" + tmpnewchar;
  86. break;
  87. case "4":
  88. tmpnewchar = "肆" + tmpnewchar;
  89. break;
  90. case "5":
  91. tmpnewchar = "伍" + tmpnewchar;
  92. break;
  93. case "6":
  94. tmpnewchar = "陆" + tmpnewchar;
  95. break;
  96. case "7":
  97. tmpnewchar = "柒" + tmpnewchar;
  98. break;
  99. case "8":
  100. tmpnewchar = "捌" + tmpnewchar;
  101. break;
  102. case "9":
  103. tmpnewchar = "玖" + tmpnewchar;
  104. break;
  105. }
  106. switch(part[0].length - i - 1) {
  107. case 0:
  108. tmpnewchar = tmpnewchar + "元";
  109. break;
  110. case 1:
  111. if(perchar != 0) tmpnewchar = tmpnewchar + "拾";
  112. break;
  113. case 2:
  114. if(perchar != 0) tmpnewchar = tmpnewchar + "佰";
  115. break;
  116. case 3:
  117. if(perchar != 0) tmpnewchar = tmpnewchar + "仟";
  118. break;
  119. case 4:
  120. tmpnewchar = tmpnewchar + "万";
  121. break;
  122. case 5:
  123. if(perchar != 0) tmpnewchar = tmpnewchar + "拾";
  124. break;
  125. case 6:
  126. if(perchar != 0) tmpnewchar = tmpnewchar + "佰";
  127. break;
  128. case 7:
  129. if(perchar != 0) tmpnewchar = tmpnewchar + "仟";
  130. break;
  131. case 8:
  132. tmpnewchar = tmpnewchar + "亿";
  133. break;
  134. case 9:
  135. tmpnewchar = tmpnewchar + "拾";
  136. break;
  137. }
  138. var newchar = tmpnewchar + newchar;
  139. }
  140. //小数点之后进行转化
  141. if(Num.indexOf(".") != -1) {
  142. if(part[1].length > 2) {
  143. // alert("小数点之后只能保留两位,系统将自动截断");
  144. part[1] = part[1].substr(0, 2)
  145. }
  146. for(i = 0; i < part[1].length; i++) {
  147. tmpnewchar = ""
  148. perchar = part[1].charAt(i)
  149. switch(perchar) {
  150. case "0":
  151. tmpnewchar = "零" + tmpnewchar;
  152. break;
  153. case "1":
  154. tmpnewchar = "壹" + tmpnewchar;
  155. break;
  156. case "2":
  157. tmpnewchar = "贰" + tmpnewchar;
  158. break;
  159. case "3":
  160. tmpnewchar = "叁" + tmpnewchar;
  161. break;
  162. case "4":
  163. tmpnewchar = "肆" + tmpnewchar;
  164. break;
  165. case "5":
  166. tmpnewchar = "伍" + tmpnewchar;
  167. break;
  168. case "6":
  169. tmpnewchar = "陆" + tmpnewchar;
  170. break;
  171. case "7":
  172. tmpnewchar = "柒" + tmpnewchar;
  173. break;
  174. case "8":
  175. tmpnewchar = "捌" + tmpnewchar;
  176. break;
  177. case "9":
  178. tmpnewchar = "玖" + tmpnewchar;
  179. break;
  180. }
  181. if(i == 0) tmpnewchar = tmpnewchar + "角";
  182. if(i == 1) tmpnewchar = tmpnewchar + "分";
  183. newchar = newchar + tmpnewchar;
  184. }
  185. }
  186. //替换所有无用汉字
  187. while(newchar.search("零零") != -1)
  188. newchar = newchar.replace("零零", "零");
  189. newchar = newchar.replace("零亿", "亿");
  190. newchar = newchar.replace("亿万", "亿");
  191. newchar = newchar.replace("零万", "万");
  192. newchar = newchar.replace("零元", "元");
  193. newchar = newchar.replace("零角", "");
  194. newchar = newchar.replace("零分", "");
  195. if(newchar.charAt(newchar.length - 1) == "元") {
  196. newchar = newchar + "整"
  197. }
  198. return newchar;
  199. }

6. Http

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

7. DOM

  1. $ (selector){
  2. var type = selector.substring(0, 1);
  3. if (type === '#') {
  4. if (document.querySelecotor) return document.querySelector(selector)
  5. return document.getElementById(selector.substring(1))
  6. }else if (type === '.') {
  7. if (document.querySelecotorAll) return document.querySelectorAll(selector)
  8. return document.getElementsByClassName(selector.substring(1))
  9. }else{
  10. return document['querySelectorAll' ? 'querySelectorAll':'getElementsByTagName'](selector)
  11. }
  12. }
  13. /*检测类名*/
  14. hasClass (ele, name) {
  15. return ele.className.match(new RegExp('(\\s|^)' + name + '(\\s|$)'));
  16. }
  17. /*添加类名*/
  18. addClass (ele, name) {
  19. if (!this.hasClass(ele, name)) ele.className += " " + name;
  20. }
  21. /*删除类名*/
  22. removeClass (ele, name) {
  23. if (this.hasClass(ele, name)) {
  24. var reg = new RegExp('(\\s|^)' + name + '(\\s|$)');
  25. ele.className = ele.className.replace(reg, '');
  26. }
  27. }
  28. /*替换类名*/
  29. replaceClass (ele, newName, oldName) {
  30. this.removeClass(ele, oldName);
  31. this.addClass(ele, newName);
  32. }
  33. /*获取兄弟节点*/
  34. siblings (ele) {
  35. console.log(ele.parentNode)
  36. var chid = ele.parentNode.children,eleMatch = [];
  37. for(var i = 0, len = chid.length; i < len; i ++){
  38. if(chid[i] != ele){
  39. eleMatch.push(chid[i]);
  40. }
  41. }
  42. return eleMatch;
  43. }
  44. /*获取行间样式属性*/
  45. getByStyle (obj,name){
  46. if(obj.currentStyle){
  47. return obj.currentStyle[name];
  48. }else{
  49. return getComputedStyle(obj,false)[name];
  50. }
  51. }

8. Storage 储存操作

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

9. Other 其它操作

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

二.css

1. 公共样式提取

  1. /* 禁止选中文本 */
  2. .usn{
  3. -webkit-user-select:none;
  4. -moz-user-select:none;
  5. -ms-user-select:none;
  6. -o-user-select:none;
  7. user-select:none;
  8. }
  9. /* 浮动 */
  10. .fl { float: left; }
  11. .fr { float: right; }
  12. .cf { zoom: 1; }
  13. .cf:after {
  14. content:".";
  15. display:block;
  16. clear:both;
  17. visibility:hidden;
  18. height:0;
  19. overflow:hidden;
  20. }
  21. /* 元素类型 */
  22. .db { display: block; }
  23. .dn { display: none; }
  24. .di { display: inline }
  25. .dib {display: inline-block;}
  26. .transparent { opacity: 0 }
  27. /*文字排版、颜色*/
  28. .f12 { font-size:12px }
  29. .f14 { font-size:14px }
  30. .f16 { font-size:16px }
  31. .f18 { font-size:18px }
  32. .f20 { font-size:20px }
  33. .fb { font-weight:bold }
  34. .fn { font-weight:normal }
  35. .t2 { text-indent:2em }
  36. .red,a.red { color:#cc0031 }
  37. .darkblue,a.darkblue { color:#039 }
  38. .gray,a.gray { color:#878787 }
  39. .lh150 { line-height:150% }
  40. .lh180 { line-height:180% }
  41. .lh200 { line-height:200% }
  42. .unl { text-decoration:underline; }
  43. .no_unl { text-decoration:none; }
  44. .tl { text-align: left; }
  45. .tc { text-align: center; }
  46. .tr { text-align: right; }
  47. .tj { text-align: justify; text-justify: inter-ideograph; }
  48. .wn { /* 强制不换行 */
  49. word-wrap:normal;
  50. white-space:nowrap;
  51. }
  52. .wb { /* 强制换行 */
  53. white-space:normal;
  54. word-wrap:break-word;
  55. word-break:break-all;
  56. }
  57. .wp { /* 保持空白序列*/
  58. overflow:hidden;text-align:left;white-space:pre-wrap;word-wrap:break-word;word-break:break-all;
  59. }
  60. .wes { /* 多出部分用省略号表示 , 用于一行 */
  61. overflow:hidden;
  62. word-wrap:normal;
  63. white-space:nowrap;
  64. text-overflow:ellipsis;
  65. }
  66. .wes-2 { /* 适用于webkit内核和移动端 */
  67. display: -webkit-box;
  68. -webkit-box-orient: vertical;
  69. -webkit-line-clamp: 2;
  70. overflow: hidden;
  71. }
  72. .wes-3 {
  73. display: -webkit-box;
  74. -webkit-box-orient: vertical;
  75. -webkit-line-clamp: 3;
  76. overflow: hidden;
  77. }
  78. .wes-4 {
  79. display: -webkit-box;
  80. -webkit-box-orient: vertical;
  81. -webkit-line-clamp: 4;
  82. overflow: hidden;
  83. }
  84. /* 溢出样式 */
  85. .ofh { overflow: hidden; }
  86. .ofs {overflow: scroll; }
  87. .ofa {overflow: auto; }
  88. .ofv {overflow: visible; }
  89. /* 定位方式 */
  90. .ps {position: static; }
  91. .pr {position: relative;zoom:1; }
  92. .pa {position: absolute; }
  93. .pf {position: fixed; }
  94. /* 垂直对齐方式 */
  95. .vt {vertical-align: top; }
  96. .vm {vertical-align: middle; }
  97. .vb {vertical-align: bottom; }
  98. /* 鼠标样式 */
  99. .csd {cursor: default; }
  100. .csp {cursor: pointer; }
  101. .csh {cursor: help; }
  102. .csm {cursor: move; }
  103. /* flex布局 */
  104. .df-sb {
  105. display:flex;
  106. align-items: center;
  107. justify-content: space-between;
  108. }
  109. .df-sa {
  110. display:flex;
  111. align-items: center;
  112. justify-content: space-around;
  113. }
  114. /* 垂直居中 */
  115. .df-c {
  116. display: flex;
  117. align-items: center;
  118. justify-content: center;
  119. }
  120. .tb-c {
  121. text-align:center;
  122. display:table-cell;
  123. vertical-align:middle;
  124. }
  125. .ts-c {
  126. position: absolute;
  127. left: 50%; top: 50%;
  128. transform: translate(-50%, -50%);
  129. }
  130. .ts-mc {
  131. position: absolute;
  132. left: 0;right: 0;
  133. bottom: 0; top: 0;
  134. margin: auto;
  135. }
  136. /* 辅助 */
  137. .mask-fixed-wrapper {
  138. width: 100%;
  139. height: 100%;
  140. position: fixed;
  141. left:0;top:0;
  142. background: rgba(0, 0, 0, 0.65);
  143. z-index: 999;
  144. }
  145. .bg-cover {
  146. background-size: cover;
  147. background-repeat: no-repeat;
  148. background-position: center center;
  149. }
  150. .bg-cover-all {
  151. background-size: 100% 100%;
  152. background-repeat: no-repeat;
  153. background-position: center center;
  154. }

发表评论

表情:
评论列表 (有 0 条评论,451人围观)

还没有评论,来说两句吧...

相关阅读