JavaScript和CSS常用工具方法封装

 因为工作中经常用到这些方法,所有便把这些方法进行了总结。

创新互联建站从2013年成立,先为晋源等服务建站,晋源等地企业,进行企业商务咨询服务。为晋源企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

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. isBoolean (o) { //是否boolean
  8.     return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
  9. }
  10. isFunction (o) { //是否函数
  11.     return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
  12. }
  13. isNull (o) { //是否为null
  14.     return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
  15. }
  16. isUndefined (o) { //是否undefined
  17.     return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
  18. }
  19. isObj (o) { //是否对象
  20.     return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
  21. }
  22. isArray (o) { //是否数组
  23.     return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
  24. }
  25. isDate (o) { //是否时间
  26.     return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
  27. }
  28. isRegExp (o) { //是否正则
  29.     return Object.prototype.toString.call(o).slice(8, -1) === 'RegExp'
  30. }
  31. isError (o) { //是否错误对象
  32.     return Object.prototype.toString.call(o).slice(8, -1) === 'Error'
  33. }
  34. isSymbol (o) { //是否Symbol函数
  35.     return Object.prototype.toString.call(o).slice(8, -1) === 'Symbol'
  36. }
  37. isPromise (o) { //是否Promise对象
  38.     return Object.prototype.toString.call(o).slice(8, -1) === 'Promise'
  39. }
  40. isSet (o) { //是否Set对象
  41.     return Object.prototype.toString.call(o).slice(8, -1) === 'Set'
  42. }
  43. isFalse (o) {
  44.     if (!o || o === 'null' || o === 'undefined' || o === 'false' || o === 'NaN') return true
  45.         return false
  46. }
  47. isTrue (o) {
  48.     return !this.isFalse(o)
  49. }
  50. isIos () {
  51.     var u = navigator.userAgent;
  52.     if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {//安卓手机
  53.         // return "Android";
  54.         return false
  55.     } else if (u.indexOf('iPhone') > -1) {//苹果手机
  56.         // return "iPhone";
  57.         return true
  58.     } else if (u.indexOf('iPad') > -1) {//iPad
  59.         // return "iPad";
  60.         return false
  61.     } else if (u.indexOf('Windows Phone') > -1) {//winphone手机
  62.         // return "Windows Phone";
  63.         return false
  64.     }else{
  65.         return false
  66.     }
  67. }
  68. isPC () { //是否为PC端
  69.     var userAgentInfo = navigator.userAgent;
  70.     var Agents = ["Android", "iPhone",
  71.                 "SymbianOS", "Windows Phone",
  72.                 "iPad", "iPod"];
  73.     var flag = true;
  74.     for (var v = 0; v < Agents.length; v++) {
  75.         if (userAgentInfo.indexOf(Agents[v]) > 0) {
  76.             flag = false;
  77.             break;
  78.         }
  79.     }
  80.     return flag;
  81. }
  82. browserType(){
  83.     var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  84.     var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器
  85.     var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器
  86.     var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
  87.     var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器  
  88.     var isFF = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器
  89.     var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器
  90.     var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1; //判断Chrome浏览器
  91.     if (isIE) {
  92.         var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
  93.         reIE.test(userAgent);
  94.         var fIEVersion = parseFloat(RegExp["$1"]);
  95.         if(fIEVersion == 7) return "IE7"
  96.         else if(fIEVersion == 8) return "IE8";
  97.         else if(fIEVersion == 9) return "IE9";
  98.         else if(fIEVersion == 10) return "IE10";
  99.         else return "IE7以下"//IE版本过低
  100.     }
  101.     if (isIE11) return 'IE11';
  102.     if (isEdge) return "Edge";
  103.     if (isFF) return "FF";
  104.     if (isOpera) return "Opera";
  105.     if (isSafari) return "Safari";
  106.     if (isChrome) return "Chrome";
  107. }
  108. checkStr (str, type) {
  109.     switch (type) {
  110.         case 'phone':   //手机号码
  111.             return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);
  112.         case 'tel':     //座机
  113.             return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
  114.         case 'card':    //身份证
  115.             return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
  116.         case 'pwd':     //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
  117.             return /^[a-zA-Z]\w{5,17}$/.test(str)
  118.         case 'postal':  //邮政编码
  119.             return /[1-9]\d{5}(?!\d)/.test(str);
  120.         case 'QQ':      //QQ号
  121.             return /^[1-9][0-9]{4,9}$/.test(str);
  122.         case 'email':   //邮箱
  123.             return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
  124.         case 'money':   //金额(小数点2位)
  125.             return /^\d*(?:\.\d{0,2})?$/.test(str);
  126.         case 'URL':     //网址
  127.             return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
  128.         case 'IP':      //IP
  129.             return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
  130.         case 'date':    //日期时间
  131.             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)
  132.         case 'number':  //数字
  133.             return /^[0-9]$/.test(str);
  134.         case 'english': //英文
  135.             return /^[a-zA-Z]+$/.test(str);
  136.         case 'chinese': //中文
  137.             return /^[\u4E00-\u9FA5]+$/.test(str);
  138.         case 'lower':   //小写
  139.             return /^[a-z]+$/.test(str);
  140.         case 'upper':   //大写
  141.             return /^[A-Z]+$/.test(str);
  142.         case 'HTML':    //HTML标记
  143.             return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
  144.         default:
  145.             return true;
  146.     }
  147.     // 严格的身份证校验
  148.     isCardID(sId) {
  149.         if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
  150.             alert('你输入的身份证长度或格式错误')
  151.             return false
  152.         }
  153.         //身份证城市
  154.         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:"国外"};
  155.         if(!aCity[parseInt(sId.substr(0,2))]) { 
  156.             alert('你的身份证地区非法')
  157.             return false
  158.         }
  159.         // 出生日期验证
  160.         var sBirthday=(sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2))).replace(/-/g,"/"),
  161.             d = new Date(sBirthday)
  162.         if(sBirthday != (d.getFullYear()+"/"+ (d.getMonth()+1) + "/" + d.getDate())) {
  163.             alert('身份证上的出生日期非法')
  164.             return false
  165.         }
  166.         // 身份证号码校验
  167.         var sum = 0,
  168.             weights =  [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
  169.             codes = "10X98765432"
  170.         for (var i = 0; i < sId.length - 1; i++) {
  171.             sum += sId[i] * weights[i];
  172.         }
  173.         var last = codes[sum % 11]; //计算出来的最后一位身份证号码
  174.         if (sId[sId.length-1] != last) { 
  175.             alert('你输入的身份证号非法')
  176.             return false
  177.         }
  178.         return true
  179.     }
  180. }

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 && year%100==0 && year%400==0) || (year%4==0 && year%100!=0) ? 28 : 29
  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{&nb

    网页标题:JavaScript和CSS常用工具方法封装
    浏览地址:http://www.shufengxianlan.com/qtweb/news26/288976.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联