自定義一些JS常用工具方法

1、去除字符串左右兩端的空格

trim: function(str) {
	return str.replace(/(^\s*)|(\s*$)/g, "");
}

2、取時間戳

createTimestamp: function() { // 取時間撮
		//  201508061018417065
		var dt = new Date()
		var y = dt.getFullYear()
		var M = dt.getMonth() + 1
		var d = dt.getDate()
		var h = dt.getHours()
		var m = dt.getMinutes()
		var sec = dt.getSeconds()
		var minsec = dt.getMilliseconds()
		var str = y + ''
		M = M < 10 ? '0' + M : M
		d = d < 10 ? '0' + d : d
		h = h < 10 ? '0' + h : h
		m = m < 10 ? '0' + m : m
		sec = sec < 10 ? '0' + sec : sec
		minsec = minsec < 1000 ? '0' + minsec : minsec
		str +='-'+ M +'-'+ d 
//		str += M + d + h + m + sec + minsec
		return str
	},

3、設置本地存儲

setCookie: function(name, value, days, domain) { //  兩個參數,一個是cookie的名子,一個是值
		try {
			if(window.localStorage) {
				window.localStorage.setItem(name, value)
				return
			}
		} catch(e) {
			var Days
			var exp = new Date()
			if(typeof(days) === 'object') {
				Days = days
			} else {
				days = (days === undefined) ? 30 : days //  此 cookie 將被保存 30 天
				Days = exp.getTime() + days * 24 * 60 * 60 * 1000
			}
			//  new Date('December 31, 9998')
			exp.setTime(Days)

			document.cookie = name + '=' + escape(value) + 'expires=' + exp.toGMTString() + 'path=/' + (domain ? 'domain=' + domain : '')
		}
	},

4、取出本地存儲的數據

getCookie: function(name) { //   取cookies函數
		try {
			if(window.localStorage && window.localStorage.getItem(name)) {
				return window.localStorage.getItem(name)
			}
		} catch(e) {
			var arr = document.cookie.match(new RegExp('(^| )' + name + '=([^]*)(|$)'))
			if(arr != null) return unescape(arr[2])
		}
		return null
	},

5、刪除本地數據

delCookie: function(name) { //  刪除cookie
		try {
			window.localStorage && window.localStorage.removeItem(name)
			document.cookie = name + '=xexpires=Fri, 31 Dec 1999 23:59:59 GMT'
			document.cookie = name + '=xexpires=Fri, 31 Dec 1999 23:59:59 GMTpath=/'
			document.cookie = name + '=xexpires=Fri, 31 Dec 1999 23:59:59 GMTpath=/domain=tcl.com'
		} catch(e) {}
	},

6、URL取值

parseQuery: function(pkey) { //  url 取值
		var search = window.location.search
		var args = search.substring(1).split('&')
		var argsParsed = {}
		var i, arg, kvp, key, value
		for(i = 0; i < args.length; i++) {
			arg = args[i]
			if(arg.indexOf('=') === -1) {
				argsParsed[decodeURIComponent(arg).replace(/(^\s*)|(\s*$)/g, '')] = true
			} else {
				kvp = arg.split('=')
				key = decodeURIComponent(kvp[0]).replace(/(^\s*)|(\s*$)/g, '')
				value = decodeURIComponent(kvp[1]).replace(/(^\s*)|(\s*$)/g, '')
				argsParsed[key] = value
			}
		}
		if(pkey) {
			return argsParsed[pkey]
		}
		return argsParsed
	},

7、生成uuid

uuid: function() {
		var uuid = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)
		return uuid
	},

8、檢測密碼強度

checkStrong: function(v, l1, l2) { //    檢測密碼強度
		let modes = 0
		let _l1 = l1 || 8
		let _l2 = l2 || 16
		if(v.length < _l1 || v > _l2) {
			return false
		}
		(/\d/.test(v)) && modes++ //    數字
		(/[a-z]/.test(v)) && modes++ //   字母小寫
		(/[A-Z]/.test(v)) && modes++ //   字母大寫
		(/\W/.test(v)) && modes++ //  特殊字符
		return modes > 1
	},

9、時間格式化函數

formatDate: function(datespan, isfull, lan) { // 時間格式化
		let date = new Date(datespan)
		let Y = date.getFullYear()
		let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1)
		let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
		let h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':'
		let m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':'
		let s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds())
		return lan ? Y + '年' + M + '月' + D + '日' + h + m + s : (isfull ? Y + '-' + M + '-' + D + ' ' + h + m + s : Y + '-' + M + '-' + D)
	},

10、截取字符串以‘***’代替

getAyName: function(str) { //    截取字符串中間以*號代替
		if(!str || str.length <= 2) {
			return str
		}
		str = str.toString()
		return str.substring(0, 2) + '***' + str.substring(str.length - 3, str.length - 1)
	},

11、地址傳參轉數組

urlTojson: function(url) { //    地址傳參轉數組
		if(!url || url.length === 0) return ''
		url = decodeURIComponent(url)
		var obj = {}
		obj.url = url.split('?')[0]
		var args = url.split('?')[1]
		if(args && args.length > 0) {
			var arg = args.split('&')
			if(arg && arg.length >= 1) {
				arg.map(function(m) {
					var ar = m.split('=')
					if(ar && ar.length > 1) {
						obj[ar[0]] = ar[1]
					}
				})
			}
		}
		return obj
	},

12、判斷微信瀏覽器

iswx: function() {
		return navigator.userAgent.toLowerCase().match(/MicroMessenger/i) === 'micromessenger'
	},

13、URL驗證正則

urlRegStr: "/^((https|http|ftp|rtsp|mms)?://)?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$/",

14、拷貝對象

copyObject: function(target, add) {
		function isObject(obj) {
			if(typeof obj == "object") {
				for(var key in obj) {
					if(obj.hasOwnProperty(key)) {
						return true; // search for first object prop
					}
				}
			}
			return false;
		}

		var _this = this;
		for(var key in add) {
			if(add.hasOwnProperty(key)) {
				if(target[key] && isObject(target[key]) && isObject(add[key])) {
					_this.copyObject(target[key], add[key]);
				} else {
					target[key] = add[key];
				}
			}
		}
		return target;
	},

15、btoa和atob

        btoa: function (str) {
		var out, i, len, c1, c2, c3, char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
		len = str.length
		i = 0
		out = ''
		while(i < len) {
			c1 = str.charCodeAt(i++) & 0xff
			if(i === len) {
				out += char.charAt(c1 >> 2)
				out += char.charAt((c1 & 0x3) << 4)
				out += '=='
				break
			}
			c2 = str.charCodeAt(i++)
			if(i === len) {
				out += char.charAt(c1 >> 2)
				out += char.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4))
				out += char.charAt((c2 & 0xF) << 2)
				out += '='
				break
			}
			c3 = str.charCodeAt(i++)
			out += char.charAt(c1 >> 2)
			out += char.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4))
			out += char.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6))
			out += char.charAt(c3 & 0x3F)
		}
		return out
	}

	atob: function(str) {
		var c1, c2, c3, c4, i, len, out,
			char = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 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, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1)
		len = str.length
		i = 0
		out = ''
		while(i < len) {
			/* c1 */
			do {
				c1 = char[str.charCodeAt(i++) & 0xff]
			}
			while (i < len && c1 === -1)
			if(c1 === -1) {
				break
			}
			/* c2 */
			do {
				c2 = char[str.charCodeAt(i++) & 0xff]
			}
			while (i < len && c2 === -1)
			if(c2 === -1) {
				break
			}
			out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4))
			/* c3 */
			do {
				c3 = str.charCodeAt(i++) & 0xff
				if(c3 === 61) {
					return out
				}
				c3 = char[c3]
			}
			while (i < len && c3 === -1)
			if(c3 === -1) {
				break
			}
			out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2))
			/* c4 */
			do {
				c4 = str.charCodeAt(i++) & 0xff
				if(c4 === 61) {
					return out
				}
				c4 = char[c4]
			}
			while (i < len && c4 === -1)
			if(c4 === -1) {
				break
			}
			out += String.fromCharCode(((c3 & 0x03) << 6) | c4)
		}
		return out
	},

16、移動端動態設置font-size和meat標籤

resize: () => {
    let i = window
    var l, c, f, g = i.document,
      a = g.documentElement,
      j = g.querySelector('meta[name="viewport"]'),
      k = g.querySelector('meta[name="flexible"]')
    if (j) {
      var b = j.getAttribute("content").match(/initial\-scale=(["']?)([\d\.]+)\1?/)
      if (b) {
        c = parseFloat(b[2]);
        l = parseInt(1 / c)
      }
    } else {
      if (k) {
        var b = k.getAttribute("content").match(/initial\-dpr=(["']?)([\d\.]+)\1?/)
        if (b) {
          l = parseFloat(b[2])
          c = parseFloat((1 / l).toFixed(2))
        }
      }
    }
    if (!l && !c) {
      var d = (i.navigator.appVersion.match(/android/gi), i.navigator.appVersion.match(/iphone/gi))
      l = i.devicePixelRatio
      l = d ? l >= 3 ? 3 : l >= 2 ? 2 : 1 : 1, c = 1 / l
    }
    if (a.setAttribute("data-dpr", l), !j) {
      if (j = g.createElement("meta"), j.setAttribute("name", "viewport"), j.setAttribute("content", "initial-scale=" + c + ", maximum-scale=" + c + ", minimum-scale=" + c + ", user-scalable=no"), a.firstElementChild) {
        a.firstElementChild.appendChild(j)
      } else {
        var e = g.createElement("div")
        e.appendChild(j), g.write(e.innerHTML)
      }
    }
    i.dpr = l
    i.addEventListener("resize", function () {
      clearTimeout(f), f = setTimeout(h, 300)
    }, false)
    i.addEventListener("pageshow", function (m) {
      m.persisted && (clearTimeout(f), f = setTimeout(h, 300))
    }, false)
    let h = () => {
      var m = a.getBoundingClientRect().width
      if (m / l > 640) {
        m = 640 * l
      }
      i.rem = m / 16
      a.style.fontSize = i.rem + "px"
    }
    h()
  },

17、圖片放大

viewImg: function(imgUrl) {
		let name = util.getCookie("user");
		var ld = document.createElement('div')
		ld.className = 'sync-loding'
		ld.innerHTML = '<div class="viewImgBox"><div class="shuiyin">'+name+'</div><img src="' + imgUrl + '"/><input type="button" class="close" value="×"></div>'
		document.body.appendChild(ld)
		ld.querySelector('.close').addEventListener('click', function() {
			document.body.removeChild(ld)
		})
		return ld
	},

18、字符串轉義字符

unhtml(str) {
		/** 將text中的html字符轉義, 僅轉義  ', ", <, > 四個字符
		 * @param  { String } str 需要轉義的字符串
		 * @returns { String }     轉義後的字符串
		 */
		return str ? str.replace(/[<">'()]/g, (a) => {
			return {
				'<': '&lt;',
				'"': '&quot;',
				'>': '&gt;',
				"'": '&#39;',
				'(': '&#40;',
				')': '&#41;',
			}[a]
		}) : '';
	},

19、下載文件

downFile: function(data, fileName) {
		var blob = new Blob([data], {
			type: 'application/vnd.ms-excel;charset=utf-8'
		});
		if(window.navigator.msSaveOrOpenBlob) {
			navigator.msSaveBlob(blob, fileName);
		} else {
			var link = document.createElement('a');
			// var force_saveable_type = 'application/vnd.ms-excel;charset=utf-8';
			// if (type && type != force_saveable_type) { // 強制下載,而非在瀏覽器中打開
			//   var slice = blob.slice || blob.webkitSlice || blob.mozSlice;
			//   blob = slice.call(blob, 0, blob.size, force_saveable_type);
			// }
			link.href = window.URL.createObjectURL(blob);
			link.download = fileName;
			link.click();
			// var event = document.createEvent('MouseEvents');
			// event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
			// save_link.dispatchEvent(event);
			window.URL.revokeObjectURL(link.href);
		}
	},

20、關閉瀏覽器

close() //author: sunlei  
	{
		var isIE = document.all ? true : false;
		if(isIE) { //IE瀏覽器  
			// var n = window.event.screenX - window.screenLeft;
			// var b = n > document.documentElement.scrollWidth - 20;
			// if(b && window.event.clientY < 0 || window.event.altKey) {
			// 	util.delCookie('token')
			// 	util.delCookie('user')
			// 	util.delCookie('userRole')
			// } else {
				
			// }
		} else { //火狐瀏覽器  
			if(document.documentElement.scrollWidth != 0) {
				
			} else {
				util.delCookie('token')
				util.delCookie('user')
				util.delCookie('userRole')
			}

		}
	},

21、轉Excel文件

dataToExcel: function(cols, data, fileName) {
		var excel = '<table>';
		//設置表頭
		var row = '<tr>';
		cols.map((o) => {
			if(o.title && o.key) {
				row += '<th>' + o.title + '</th>'
			}
		})
		//換行
		excel += row + '</tr>';
		data.map((o) => {
			excel += '<tr>'
			for(var x in o) {
				excel += '<td>' + (o[x] || '') + '</td>'
			}
			excel += '</tr>'
		})
		excel += "</table>";
		var excelFile = `<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8"><meta http-equiv="content-type" content="application/vnd.ms-excel;charset=UTF-8"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body>` + excel + `</body></html>`
		var uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile);
		var link = document.createElement("a");
		link.href = uri;
		link.style = "visibility:hidden";
		link.download = fileName; // + ".xls";
		document.body.appendChild(link);
		link.click();
		document.body.removeChild(link);
	},

22、檢測密碼強度

	checkPwdStrong(str) {
		if(str && str.length > 0) {
			let modes = 0;
			let c = 0;
			var b = 'a';
			(/\d/.test(str)) && modes++ //    數字
			(/[a-z]/.test(str)) && modes++ //   字母小寫
			(/[A-Z]/.test(str)) && modes++ //   字母大寫
			(/\W/.test(str)) && modes++ //  特殊字符

			if(modes == 1) {

			} else if(modes == 2 || modes == 3) {
				c = 40, b = '中'
			}
			switch(modes) {
				case 1:
					c = 20, b = '弱'
					break;
				case 2:
					c = 40, b = '中'
					break;
				case 3:
					c = 80, b = '高'
					break;
				case 4:
				case 5:
				case 6:
					c = 100, b = '強'
					break;
				default:
					c = 0, b = '弱'
					break;
			}
			if(str.length < 8) {
				c = 20, b = '弱'
			}
			return {
				key: b,
				value: c
			}
		}
		return {
			key: '弱',
			value: 0
		}
	},

個人博客:jilezhainanshe.com​​​​​​​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章