1. Enter a value and return its data type
function type(para) { return Object.prototype.toString.call(para) } Copy code
2. Array de duplication
function unique1(arr) { return [...new Set(arr)] } function unique2(arr) { var obj = {}; return arr.filter(ele => { if (!obj[ele]) { obj[ele] = true; return true; } }) } function unique3(arr) { var result = []; arr.forEach(ele => { if (result.indexOf(ele) == -1) { result.push(ele) } }) return result; } Copy code
3. String de duplication
String.prototype.unique = function () { var obj = {}, str = '', len = this.length; for (var i = 0; i < len; i++) { if (!obj[this[i]]) { str += this[i]; obj[this[i]] = true; } } return str; } ###### //Remove contiguous strings function uniq(str) { return str.replace(/(\w)\1+/g, '$1') } Copy code
4. Deep copy shallow copy
//Deep cloning (deep cloning does not consider functions) function deepClone(obj, result) { var result = result || {}; for (var prop in obj) { if (obj.hasOwnProperty(prop)) { if (typeof obj[prop] == 'object' && obj[prop] !== null) { // Reference value (obj/array) and not null if (Object.prototype.toString.call(obj[prop]) == '[object Object]') { // object result[prop] = {}; } else { // array result[prop] = []; } deepClone(obj[prop], result[prop]) } else { // Original value or func result[prop] = obj[prop] } } } return result; } // Deep and shallow cloning is for reference values function deepClone(target) { if (typeof (target) !== 'object') { return target; } var result; if (Object.prototype.toString.call(target) == '[object Array]') { // array result = [] } else { // object result = {}; } for (var prop in target) { if (target.hasOwnProperty(prop)) { result[prop] = deepClone(target[prop]) } } return result; } // Unable to copy function var o1 = jsON.parse(jsON.stringify(obj1)); Copy code
5. reverse underlying principle and extension
// Change original array Array.prototype.myReverse = function () { var len = this.length; for (var i = 0; i < len; i++) { var temp = this[i]; this[i] = this[len - 1 - i]; this[len - 1 - i] = temp; } return this; } Copy code
6. Inheritance of the Grail model
function inherit(Target, Origin) { function F() {}; F.prototype = Origin.prototype; Target.prototype = new F(); Target.prototype.constructor = Target; // The final prototype points to Target.prop.uber = Origin.prototype; } Copy code
7. Find the letter that appears only once for the first time in the string
String.prototype.firstAppear = function () { var obj = {}, len = this.length; for (var i = 0; i < len; i++) { if (obj[this[i]]) { obj[this[i]]++; } else { obj[this[i]] = 1; } } for (var prop in obj) { if (obj[prop] == 1) { return prop; } } } Copy code
8. Find the nth parent element of the element
function parents(ele, n) { while (ele && n) { ele = ele.parentElement ? ele.parentElement : ele.parentNode; n--; } return ele; } Copy code
9, Returns the nth sibling node of the element
function retSibling(e, n) { while (e && n) { if (n > 0) { if (e.nextElementSibling) { e = e.nextElementSibling; } else { for (e = e.nextSibling; e && e.nodeType !== 1; e = e.nextSibling); } n--; } else { if (e.previousElementSibling) { e = e.previousElementSibling; } else { for (e = e.previousElementSibling; e && e.nodeType !== 1; e = e.previousElementSibling); } n++; } } return e; } Copy code
10. Encapsulate mychildren to solve the compatibility problem of browsers
function myChildren(e) { var children = e.childNodes, arr = [], len = children.length; for (var i = 0; i < len; i++) { if (children[i].nodeType === 1) { arr.push(children[i]) } } return arr; } Copy code
11. Determine whether the element has child elements
function hasChildren(e) { var children = e.childNodes, len = children.length; for (var i = 0; i < len; i++) { if (children[i].nodeType === 1) { return true; } } return false; } Copy code
12. I insert one element after another
Element.prototype.insertAfter = function (target, elen) { var nextElen = elen.nextElenmentSibling; if (nextElen == null) { this.appendChild(target); } else { this.insertBefore(target, nextElen); } } Copy code
13. Returns the current time (mm / DD / yyyy H / min / s)
function getDateTime() { var date = new Date(), year = date.getFullYear(), month = date.getMonth() + 1, day = date.getDate(), hour = date.getHours() + 1, minute = date.getMinutes(), second = date.getSeconds(); month = checkTime(month); day = checkTime(day); hour = checkTime(hour); minute = checkTime(minute); second = checkTime(second); function checkTime(i) { if (i < 10) { i = "0" + i; } return i; } return "" + year + "year" + month + "month" + day + "day" + hour + "Time" + minute + "branch" + second + "second" } Copy code
14. Gets the scroll distance of the scroll bar
function getScrollOffset() { if (window.pageXOffset) { return { x: window.pageXOffset, y: window.pageYOffset } } else { return { x: document.body.scrollLeft + document.documentElement.scrollLeft, y: document.body.scrollTop + document.documentElement.scrollTop } } } Copy code
15. Gets the size of the viewport
function getViewportOffset() { if (window.innerWidth) { return { w: window.innerWidth, h: window.innerHeight } } else { // ie8 and below if (document.compatMode === "BackCompat") { // Weird pattern return { w: document.body.clientWidth, h: document.body.clientHeight } } else { // Standard mode return { w: document.documentElement.clientWidth, h: document.documentElement.clientHeight } } } } Copy code
16. Gets any attribute of any element
function getStyle(elem, prop) { return window.getComputedStyle ? window.getComputedStyle(elem, null)[prop] : elem.currentStyle[prop] } Copy code
17. Compatible code for binding events
function addEvent(elem, type, handle) { if (elem.addEventListener) { //Non ie and non ie9 elem.addEventListener(type, handle, false); } else if (elem.attachEvent) { //ie6 to ie8 elem.attachEvent('on' + type, function () { handle.call(elem); }) } else { elem['on' + type] = handle; } } Copy code
18. Unbinding event
function removeEvent(elem, type, handle) { if (elem.removeEventListener) { //Non ie and non ie9 elem.removeEventListener(type, handle, false); } else if (elem.detachEvent) { //ie6 to ie8 elem.detachEvent('on' + type, handle); } else { elem['on' + type] = null; } } Copy code
19. De bubbling compatibility code
function stopBubble(e) { if (e && e.stopPropagation) { e.stopPropagation(); } else { window.event.cancelBubble = true; } } Copy code
20. Verify that the string is a palindrome
function isPalina(str) { if (Object.prototype.toString.call(str) !== '[object String]') { return false; } var len = str.length; for (var i = 0; i < len / 2; i++) { if (str[i] != str[len - 1 - i]) { return false; } } return true; } Copy code
21. Check whether the string is palindrome
function isPalindrome(str) { str = str.replace(/\W/g, '').toLowerCase(); console.log(str) return (str == str.split('').reverse().join('')) } Copy code
22. Compatible with getElementsByClassName method
Element.prototype.getElementsByClassName = Document.prototype.getElementsByClassName = function (_className) { var allDomArray = document.getElementsByTagName('*'); var lastDomArray = []; function trimSpace(strClass) { var reg = /\s+/g; return strClass.replace(reg, ' ').trim() } for (var i = 0; i < allDomArray.length; i++) { var classArray = trimSpace(allDomArray[i].className).split(' '); for (var j = 0; j < classArray.length; j++) { if (classArray[j] == _className) { lastDomArray.push(allDomArray[i]); break; } } } return lastDomArray; } Copy code
23. Motion function
function animate(obj, json, callback) { clearInterval(obj.timer); var speed, current; obj.timer = setInterval(function () { var lock = true; for (var prop in json) { if (prop == 'opacity') { current = parseFloat(window.getComputedStyle(obj, null)[prop]) * 100; } else { current = parseInt(window.getComputedStyle(obj, null)[prop]); } speed = (json[prop] - current) / 7; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if (prop == 'opacity') { obj.style[prop] = (current + speed) / 100; } else { obj.style[prop] = current + speed + 'px'; } if (current != json[prop]) { lock = false; } } if (lock) { clearInterval(obj.timer); typeof callback == 'function' ? callback() : ''; } }, 30) } Copy code
24. Elastic movement
function ElasticMovement(obj, target) { clearInterval(obj.timer); var iSpeed = 40, a, u = 0.8; obj.timer = setInterval(function () { a = (target - obj.offsetLeft) / 8; iSpeed = iSpeed + a; iSpeed = iSpeed * u; if (Math.abs(iSpeed) <= 1 && Math.abs(a) <= 1) { console.log('over') clearInterval(obj.timer); obj.style.left = target + 'px'; } else { obj.style.left = obj.offsetLeft + iSpeed + 'px'; } }, 30); } Copy code
25. Encapsulate your own forEach method
Array.prototype.myForEach = function (func, obj) { var len = this.length; var _this = arguments[1] ? arguments[1] : window; // var _this=arguments[1]||window; for (var i = 0; i < len; i++) { func.call(_this, this[i], i, this) } } Copy code
26. Encapsulate your own filter method
Array.prototype.myFilter = function (func, obj) { var len = this.length; var arr = []; var _this = arguments[1] || window; for (var i = 0; i < len; i++) { func.call(_this, this[i], i, this) && arr.push(this[i]); } return arr; } Copy code
27. Array map method
Array.prototype.myMap = function (func) { var arr = []; var len = this.length; var _this = arguments[1] || window; for (var i = 0; i < len; i++) { arr.push(func.call(_this, this[i], i, this)); } return arr; } Copy code
28. Array every method
Array.prototype.myEvery = function (func) { var flag = true; var len = this.length; var _this = arguments[1] || window; for (var i = 0; i < len; i++) { if (func.apply(_this, [this[i], i, this]) == false) { flag = false; break; } } return flag; } Copy code
29. Array reduce method
Array.prototype.myReduce = function (func, initialValue) { var len = this.length, nextValue, i; if (!initialValue) { // No second parameter passed nextValue = this[0]; i = 1; } else { // The second parameter was passed nextValue = initialValue; i = 0; } for (; i < len; i++) { nextValue = func(nextValue, this[i], i, this); } return nextValue; } Copy code
30. Get the parameters in the url (1)
function getWindonHref() { var sHref = window.location.href; var args = sHref.split('?'); if (args[0] === sHref) { return ''; } var hrefarr = args[1].split('#')[0].split('&'); var obj = {}; for (var i = 0; i < hrefarr.length; i++) { hrefarr[i] = hrefarr[i].split('='); obj[hrefarr[i][0]] = hrefarr[i][1]; } return obj; } Copy code
31. Array sorting
// Fast platoon [left] + min + [right] function quickArr(arr) { if (arr.length <= 1) { return arr; } var left = [], right = []; var pIndex = Math.floor(arr.length / 2); var p = arr.splice(pIndex, 1)[0]; for (var i = 0; i < arr.length; i++) { if (arr[i] <= p) { left.push(arr[i]); } else { right.push(arr[i]); } } // recursion return quickArr(left).concat([p], quickArr(right)); } // Bubbling function bubbleSort(arr) { for (var i = 0; i < arr.length - 1; i++) { for (var j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr; } function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len - 1; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } Copy code
32. Traversing Dom tree
// A DOM element on a given page accesses the element itself and all its descendants (not just its direct child elements) // For each accessed element, the function passes the element to the provided callback function function traverse(element, callback) { callback(element); var list = element.children; for (var i = 0; i < list.length; i++) { traverse(list[i], callback); } } Copy code
33. Native js encapsulates ajax (1)
function ajax(method, url, callback, data, flag) { var xhr; flag = flag || true; method = method.toUpperCase(); if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject('Microsoft.XMLHttp'); } xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { console.log(2) callback(xhr.responseText); } } if (method == 'GET') { var date = new Date(), timer = date.getTime(); xhr.open('GET', url + '?' + data + '&timer' + timer, flag); xhr.send() } else if (method == 'POST') { xhr.open('POST', url, flag); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(data); } } Copy code
34. Asynchronous loading script
function loadScript(url, callback) { var oscript = document.createElement('script'); if (oscript.readyState) { // ie8 and below oscript.onreadystatechange = function () { if (oscript.readyState === 'complete' || oscript.readyState === 'loaded') { callback(); } } } else { oscript.onload = function () { callback() }; } oscript.src = url; document.body.appendChild(oscript); } Copy code
35. cookie management
var cookie = { set: function (name, value, time) { document.cookie = name + '=' + value + '; max-age=' + time; return this; }, remove: function (name) { return this.setCookie(name, '', -1); }, get: function (name, callback) { var allCookieArr = document.cookie.split('; '); for (var i = 0; i < allCookieArr.length; i++) { var itemCookieArr = allCookieArr[i].split('='); if (itemCookieArr[0] === name) { return itemCookieArr[1] } } return undefined; } } Copy code
36. Implement the bind() method
Function.prototype.myBind = function (target) { var target = target || window; var _args1 = [].slice.call(arguments, 1); var self = this; var temp = function () {}; var F = function () { var _args2 = [].slice.call(arguments, 0); var parasArr = _args1.concat(_args2); return self.apply(this instanceof temp ? this : target, parasArr) } temp.prototype = self.prototype; F.prototype = new temp(); return F; } Copy code
37. Implement the call() method
Function.prototype.myCall = function () { var ctx = arguments[0] || window; ctx.fn = this; var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]) } var result = ctx.fn(...args); delete ctx.fn; return result; } Copy code
38. Implement the apply() method
Function.prototype.myApply = function () { var ctx = arguments[0] || window; ctx.fn = this; if (!arguments[1]) { var result = ctx.fn(); delete ctx.fn; return result; } var result = ctx.fn(...arguments[1]); delete ctx.fn; return result; } Copy code
39. Anti shake
function debounce(handle, delay) { var timer = null; return function () { var _self = this, _args = arguments; clearTimeout(timer); timer = setTimeout(function () { handle.apply(_self, _args) }, delay) } } Copy code
40. Throttling
function throttle(handler, wait) { var lastTime = 0; return function (e) { var nowTime = new Date().getTime(); if (nowTime - lastTime > wait) { handler.apply(this, arguments); lastTime = nowTime; } } } Copy code
41. requestAnimFrame compatibility method
window.requestAnimFrame = (function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (callback) { window.setTimeout(callback, 1000 / 60); }; })(); Copy code
42. cancelAnimFrame compatibility method
window.cancelAnimFrame = (function () { return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function (id) { window.clearTimeout(id); }; })(); Copy code
43. jsonp underlying method
function jsonp(url, callback) { var oscript = document.createElement('script'); if (oscript.readyState) { // ie8 and below oscript.onreadystatechange = function () { if (oscript.readyState === 'complete' || oscript.readyState === 'loaded') { callback(); } } } else { oscript.onload = function () { callback() }; } oscript.src = url; document.body.appendChild(oscript); } Copy code
44. Get the parameters on the url (2)
function getUrlParam(sUrl, sKey) { var result = {}; sUrl.replace(/(\w+)=(\w+)(?=[&|#])/g, function (ele, key, val) { if (!result[key]) { result[key] = val; } else { var temp = result[key]; result[key] = [].concat(temp, val); } }) if (!sKey) { return result; } else { return result[sKey] || ''; } } Copy code
45. Format time
function formatDate(t, str) { var obj = { yyyy: t.getFullYear(), yy: ("" + t.getFullYear()).slice(-2), M: t.getMonth() + 1, MM: ("0" + (t.getMonth() + 1)).slice(-2), d: t.getDate(), dd: ("0" + t.getDate()).slice(-2), H: t.getHours(), HH: ("0" + t.getHours()).slice(-2), h: t.getHours() % 12, hh: ("0" + t.getHours() % 12).slice(-2), m: t.getMinutes(), mm: ("0" + t.getMinutes()).slice(-2), s: t.getSeconds(), ss: ("0" + t.getSeconds()).slice(-2), w: ['day', 'one', 'two', 'three', 'four', 'five', 'six'][t.getDay()] }; return str.replace(/([a-z]+)/ig, function ($1) { return obj[$1] }); } Copy code
46. Verify the regular expression of the mailbox
function isAvailableEmail(sEmail) { var reg = /^([\w+.])+@\w+([.]\w+)+$/ return reg.test(sEmail) } Copy code
47. Function coritization
//It is a technology that transforms a function that accepts multiple parameters into a function that accepts a single parameter (the first parameter of the original function), and returns a new function that accepts the remaining parameters and returns the result function curryIt(fn) { var length = fn.length, args = []; var result = function (arg) { args.push(arg); length--; if (length <= 0) { return fn.apply(this, args); } else { return result; } } return result; } Copy code
48. Addition of large numbers
function sumBigNumber(a, b) { var res = '', //result temp = 0; //Bitwise addition result and carry a = a.split(''); b = b.split(''); while (a.length || b.length || temp) { //~~Bitwise non-1. Type conversion, converted to number 2.~~undefined==0 temp += ~~a.pop() + ~~b.pop(); res = (temp % 10) + res; temp = temp > 9; } return res.replace(/^0+/, ''); } Copy code
49. Singleton mode
function getSingle(func) { var result; return function () { if (!result) { result = new func(arguments); } return result; } } Copy code
50. Load JS | CSS | style
const loadRes = function(name, type, fn) { // Load JS | CSS | style let ref if (type === 'js') { // External js ref = document.createElement('script') ref.setAttribute('type', 'text/JavaScript') ref.setAttribute('src', name) } else if (type === 'css') { // External css ref = document.createElement('link') ref.setAttribute('rel', 'stylesheet') ref.setAttribute('type', 'text/css') ref.setAttribute('href', name) } else if (type === 'style') { // style ref = document.createElement('style') ref.innerhtml = name } if (typeof ref !== 'undefined') { document.getElementsByTagName('head')[0].appendChild(ref) ref.onload = function() { // Load complete execution typeof fn === 'function' && fn() } } } Copy code
51. Get url parameters (3)
const getUrlParam = function(name) { // Get url parameters let reg = new RegExp('(^|&?)' + name + '=([^&]*)(&|$)', 'i') let r = window.location.href.substr(1).match(reg) if (r != null) { return decodeURI(r[2]) } return undefined } Copy code
52. Local storage
const store = { // Local storage set: function(name, value, day) { // set up let d = new Date() let time = 0 day = (typeof(day) === 'undefined' || !day) ? 1 : day // Time, stored for 1 day by default time = d.setHours(d.getHours() + (24 * day)) // millisecond localStorage.setItem(name, JSON.stringify({ data: value, time: time })) }, get: function(name) { // obtain let data = localStorage.getItem(name) if (!data) { return null } let obj = JSON.parse(data) if (new Date().getTime() > obj.time) { // be overdue localStorage.removeItem(name) return null } else { return obj.data } }, clear: function(name) { // empty if (name) { // Delete cache with key name localStorage.removeItem(name) } else { // Empty all localStorage.clear() } } } Copy code
53. cookie operation [set, get, del]
const cookie = { // cookie operation [set, get, del] set: function(name, value, day) { let oDate = new Date() oDate.setDate(oDate.getDate() + (day || 30)) document.cookie = name + '=' + value + ';expires=' + oDate + "; path=/;" }, get: function(name) { let str = document.cookie let arr = str.split('; ') for (let i = 0; i < arr.length; i++) { let newArr = arr[i].split('=') if (newArr[0] === name) { return newArr[1] } } }, del: function(name) { this.set(name, '', -1) } } Copy code
54. Js get element style [ support inline ]
const getRealStyle = function(obj, styleName) { // Js get element style [support inline] var realStyle = null if (obj.currentStyle) { realStyle = obj.currentStyle[styleName] } else if (window.getComputedStyle) { realStyle = window.getComputedStyle(obj, null)[styleName] } return realStyle } Copy code
55. Time format
const formatDate = function(fmt, date) { // Time format ['yyyy MM DD HH: mm: Ss', time] if (typeof date !== 'object') { date = !date ? new Date() : new Date(date) } var o = { 'M+': date.getMonth() + 1, // month 'd+': date.getDate(), // day 'h+': date.getHours(), // hour 'm+': date.getMinutes(), // branch 's+': date.getSeconds(), // second 'q+': Math.floor((date.getMonth() + 3) / 3), // quarter 'S': date.getMilliseconds() // millisecond } if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) } for (var k in o) { if (new RegExp('(' + k + ')').test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) } } return fmt } Copy code
56. Native ajax operation (2)
const ajax = function(conf) { // ajax operation let url = conf.url, data = conf.data, senData = [], // Encapsulated data async = conf.async !== undefined ? conf.async : true, // This is an asynchronous request type = conf.type || 'get', // Default request method: get dataType = conf.dataType || 'json', contenType = conf.contenType || 'application/x-www-form-urlencoded', success = conf.success, error = conf.error, isForm = conf.isForm || false, // formdata header = conf.header || {}, // Header information xhr = '' // Creating ajax engine objects if (data == null) { senData = '' } else if (typeof data === 'object' && !isForm) { // If data is an object, it is converted to a string for (var k in data) { senData.push(encodeURIComponent(k) + '=' + encodeURIComponent(data[k])) } senData = senData.join('&') } else { senData = data } try { xhr = new ActiveXObject('microsoft.xmlhttp') // IE kernel series browser } catch (e1) { try { xhr = new XMLHttpRequest() // Non IE kernel browser } catch (e2) { if (error != null) { error('I won't support it ajax request') } } }; xhr.open(type, type !== 'get' ? url : url + '?' + senData, async) if (type !== 'get' && !isForm) { xhr.setRequestHeader('content-type', contenType) } for (var h in header) { xhr.setRequestHeader(h, header[h]) } xhr.send(type !== 'get' ? senData : null) xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300) { if (dataType === 'json' && success != null) { let res = '' try { res = eval('(' + xhr.responseText + ')') } catch (e) { console.log(e) } success(res) // Convert json string to js object }; } else { if (error != null) { error('Communication failure!' + xhr.status) } } } } } Copy code
57. Encapsulation of fetch request
const fetch = function(url, setting) { // Encapsulation of fetch requests let opts = { // Set the initial value of the parameter method: (setting.method || 'GET').toUpperCase(), // Request mode headers: setting.headers || {}, // Request header settings credentials: setting.credentials || true, // Set whether cookie s are sent together body: setting.body || {}, mode: setting.mode || 'no-cors', // CORS, no CORS, and same origin can be set redirect: setting.redirect || 'follow', // follow, error, manual cache: setting.cache || 'default' // Set cache mode (default, reload, no cache) } let dataType = setting.dataType || 'json' // Analytical method let data = setting.data || '' // parameter let paramsFormat = function(obj) { // Parameter format 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 ? `?${paramsFormat(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) }) }) } Copy code
58. Device judgment: android, ios, web
const isDevice = function() { // Determine whether it is android, ios or web var ua = navigator.userAgent.toLowerCase() if (ua.match(/iPhone\sOS/i) === 'iphone os' || ua.match(/iPad/i) === 'ipad') { // ios return 'iOS' } if (ua.match(/Android/i) === 'android') { return 'Android' } return 'Web' } Copy code
59. Judge whether it is wechat
const isWx = function() { // Judge whether it is wechat var ua = window.navigator.userAgent.toLowerCase() if (ua.match(/MicroMessenger/i) === 'micromessenger') { return true } return false } Copy code
60. Text copy function
const copyTxt = function(text, fn) { // Copy function if (typeof document.execCommand !== 'function') { console.log('Copy failed, long press copy') return } var dom = document.createElement('textarea') dom.value = text dom.setAttribute('style', 'display: block;width: 1px;height: 1px;') document.body.appendChild(dom) dom.select() var result = document.execCommand('copy') document.body.removeChild(dom) if (result) { console.log('Copy succeeded') typeof fn === 'function' && fn() return } if (typeof document.createRange !== 'function') { console.log('Copy failed, long press copy') return } var range = document.createRange() var div = document.createElement('div') div.innerhtml = text div.setAttribute('style', 'height: 1px;fontSize: 1px;overflow: hidden;') document.body.appendChild(div) range.selectNode(div) var selection = window.getSelection() console.log(selection) if (selection.rangeCount > 0) { selection.removeAllRanges() } selection.addRange(range) document.execCommand('copy') typeof fn === 'function' && fn() console.log('Copy succeeded') } Copy code
61. Judge whether it is an array
const isArray = function(arr) { // Determine whether it is an array return Object.prototype.toString.call(arr) === '[object Array]' } Copy code
62. Judge whether the two arrays are equal
const arrayEqual = function(arr1, arr2) { //Determine whether two arrays are equal if (arr1 === arr2) return true; if (arr1.length != arr2.length) return false; for (let i = 0; i < arr1.length; ++i) { if (arr1[i] !== arr2[i]) return false; } return true; } Copy code
63. Time and timestamp conversion
const stamp = { // Time stamp conversion getTime: function(time) { // Time to 10 bit timestamp let date = time ? new Date(time) : new Date() return Math.round(date.getTime() / 1000) }, timeToStr: function(time, fmt) { // 10 bit timestamp to time return new Date(time * 1000).pattern(fmt || 'yyyy-MM-dd') } } Copy code
64. Common regular verification
const checkStr = function(str, type) { // Regular verification is commonly used. Note the case of type switch (type) { case 'phone': // phone number return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str) case 'tel': // Landline return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str) case 'card': // ID return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str) case 'pwd': // The password starts with a letter and is between 6 and 18 in length. It can only contain letters, numbers and underscores return /^[a-zA-Z]\w{5,17}$/.test(str) case 'postal': // Postal Code return /[1-9]\d{5}(?!\d)/.test(str) case 'QQ': // QQ number return /^[1-9][0-9]{4,9}$/.test(str) case 'email': // mailbox return /^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$/.test(str) case 'money': // Amount (2 decimal places) return /^\d*(?:.\d{0,2})?$/.test(str) case 'URL': // website return /(http|ftp|https)://[\w-_]+(.[\w-_]+)+([\w-.,@?^=%&:/~+#]*[\w-@?^=%&/~+#])?/.test(str) case 'IP': // IP return /((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))/.test(str) case 'date': // Date time return /^(\d{4})-(\d{2})-(\d{2}) (\d{2})(?::\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})-(\d{2})-(\d{2})$/.test(str) case 'number': // number return /^[0-9]$/.test(str) case 'english': // english return /^[a-zA-Z]+$/.test(str) case 'chinese': // chinese return /^[\u4E00-\u9FA5]+$/.test(str) case 'lower': // a lowercase letter return /^[a-z]+$/.test(str) case 'upper': // Capitalize return /^[A-Z]+$/.test(str) case 'HTML': // HTML tags return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str) default: return true } } Copy code
65. Is it PC terminal
const isPC = function() { // Is it PC side let userAgentInfo = navigator.userAgent let Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod'] let flag = true for (let v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false break } } return flag } Copy code
66. Remove string spaces
const trim = function(str, type) { // Remove spaces, type: 1 - all spaces, 2 - front and rear spaces, 3 - front spaces, 4 - rear spaces type = type || 1 switch (type) { case 1: return str.replace(/\s+/g, '') case 2: return str.replace(/(^\s*)|(\s*$)/g, '') case 3: return str.replace(/(^\s*)/g, '') case 4: return str.replace(/(\s*$)/g, '') default: return str } } Copy code
67. String case conversion
const changeCase = function(str, type) { // String case conversion type: 1: initial uppercase 2: initial lowercase 3: case conversion 4: all uppercase 5: all lowercase 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 } } Copy code
68. Filter html code
const filterTag = function(str) { // Filter html code (convert < >) str = str.replace(/&/ig, '&') str = str.replace(/</ig, '<') str = str.replace(/>/ig, '>') str = str.replace(' ', ' ') return str } Copy code
69. Generate random number range
const random = function(min, max) { // Generate random number range if (arguments.length === 2) { return Math.floor(min + Math.random() * ((max + 1) - min)) } else { return null } } Copy code
70. Arabic numerals to Chinese capital figures
const numberToChinese = function(num) { // Translate Arabic numerals into Chinese capital numerals let AA = new Array('Fatal Frame', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten') let BB = new Array('', 'ten', 'hundred', 'Thousand', 'Ten thousand', 'Hundred million', 'spot', '') let a = ('' + num).replace(/(^0*)/g, '').split('.') let k = 0 let re = '' for (let 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) { // Add decimal part (if any) re += BB[6] for (let i = 0; i < a[1].length; i++) { re += AA[a[1].charAt(i)] } } if (re === 'ten') { re = 'ten' } if (re.match(/^one/) && re.length === 3) { re = re.replace('one', '') } return re } Copy code
71. Native dom operation
const dom = { $: function(selector) { let 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: function(ele, name) { /* Detection class name */ return ele.className.match(new RegExp('(\s|^)' + name + '(\s|$)')) }, addClass: function(ele, name) { /* Add class name */ if (!this.hasClass(ele, name)) ele.className += ' ' + name }, removeClass: function(ele, name) { /* Delete class name */ if (this.hasClass(ele, name)) { let reg = new RegExp('(\s|^)' + name + '(\s|$)') ele.className = ele.className.replace(reg, '') } }, replaceClass: function(ele, newName, oldName) { /* Replace class name */ this.removeClass(ele, oldName) this.addClass(ele, newName) }, siblings: function(ele) { /* Get sibling node */ console.log(ele.parentNode) let chid = ele.parentNode.children, eleMatch = [] for (let i = 0, len = chid.length; i < len; i++) { if (chid[i] !== ele) { eleMatch.push(chid[i]) } } return eleMatch }, getByStyle: function(obj, name) { /* Get inter line style properties */ if (obj.currentStyle) { return obj.currentStyle[name] } else { return getComputedStyle(obj, false)[name] } }, domToStirng: function(htmlDOM) { /* DOM To string */ var div = document.createElement('div') div.appendChild(htmlDOM) return div.innerHTML }, stringToDom: function(htmlString) { /* String to DOM */ var div = document.createElement('div') div.innerHTML = htmlString return div.children[0] } } Copy code
72. Judge that the picture loading is completed
const imgLoadAll = function(arr, callback) { // Picture loading let arrImg = [] for (let i = 0; i < arr.length; i++) { let img = new Image() img.src = arr[i] img.onload = function() { arrImg.push(this) if (arrImg.length == arr.length) { callback && callback() } } } } Copy code
73. Audio loading is completed
const loadAudio = function(src, callback) { // Audio loading var audio = new Audio(src) audio.onloadedmetadata = callback audio.src = src } Copy code
74. Insert characters at the cursor position
const insertAtCursor = function(dom, val) { // Insert character at cursor position if (document.selection) { dom.focus() let 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() } } Copy code
75. Picture address to base64
const getBase64 = function(img) { //Pass in the image path and return base64. Use getBase64(url).then(function(base64){},function(err) {}); let getBase64Image = function(img, width, height) { //When width and height are called, specific pixel values are passed in to control the size. If not, the default image size is used let canvas = document.createElement("canvas"); canvas.width = width ? width : img.width; canvas.height = height ? height : img.height; let ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); let dataURL = canvas.toDataURL(); return dataURL; } let image = new Image(); image.crossOrigin = ''; image.src = img; let deferred = $.Deferred(); if (img) { image.onload = function() { deferred.resolve(getBase64Image(image)); } return deferred.promise(); } } Copy code
76. base64 image download function
const downloadFile = function(base64, fileName) { //base64 image download function let base64ToBlob = function(code) { let parts = code.split(';base64,'); let contentType = parts[0].split(':')[1]; let raw = window.atob(parts[1]); let rawLength = raw.length; let uInt8Array = new Uint8Array(rawLength); for (let i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i); } return new Blob([uInt8Array], { type: contentType }); }; let aLink = document.createElement('a'); let blob = base64ToBlob(base64); //new Blob([content]); let evt = document.createEvent("HTMLEvents"); evt.initEvent("click", true, true); //initEvent without the last two parameters will report an error event type under FF, whether it bubbles, and whether it blocks the default behavior of the browser aLink.download = fileName; aLink.href = URL.createObjectURL(blob); aLink.click(); } Copy code
77. Does the browser support webP format pictures
const isSupportWebP = function() { //Determine whether the browser supports webP format pictures return !![].map && document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') == 0; } Copy code
78. url parameter to object
const parseQueryString = function(url) { //url parameter to object url = !url ? window.location.href : url; if (url.indexOf('?') === -1) { return {}; } let search = url[0] === '?' ? url.substr(1) : url.substring(url.lastIndexOf('?') + 1); if (search === '') { return {}; } search = search.split('&'); let query = {}; for (let i = 0; i < search.length; i++) { let pair = search[i].split('='); query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || ''); } return query; } Copy code
79. Object serialization [object to url parameter]
const stringfyQueryString = function(obj) { //Object serialization [object to url parameter] if (!obj) return ''; let pairs = []; for (let key in obj) { let value = obj[key]; if (value instanceof Array) { for (let i = 0; i < value.length; ++i) { pairs.push(encodeURIComponent(key + '[' + i + ']') + '=' + encodeURIComponent(value[i])); } continue; } pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key])); } return pairs.join('&'); } Copy code
80. H5 soft keyboard retracts and pops up for callback
const h5Resize = function(downCb, upCb) { //When the software keyboard pops up, it will change the current window.innerHeight. Listen for the change of this value [downCb callback when the soft keyboard pops up, upCb callback when the soft keyboard pops up] var clientHeight = window.innerHeight; downCb = typeof downCb === 'function' ? downCb : function() {} upCb = typeof upCb === 'function' ? upCb : function() {} window.addEventListener('resize', () => { var height = window.innerHeight; if (height === clientHeight) { downCb(); } if (height < clientHeight) { upCb(); } }); } Copy code
81. Function anti shake
const debounce = function(func, wait, immediate) { //Function anti shake [func function, wait delay execution milliseconds, immediate true table immediate execution, false table non immediate execution, immediate execution is the effect that the function will execute immediately after the event is triggered, and then the function can continue to execute only if the event is not triggered within n seconds] let timeout; return function() { let context = this; let args = arguments; if (timeout) clearTimeout(timeout); if (immediate) { var callNow = !timeout; timeout = setTimeout(() => { timeout = null; }, wait) if (callNow) func.apply(context, args) } else { timeout = setTimeout(function() { func.apply(context, args) }, wait); } } } Copy code
82. Function throttling
const throttle = function(func, wait ,type) { //Function throttling [func function wait delay execution milliseconds type 1 table timestamp version, 2 table timer version] if(type===1){ let previous = 0; }else if(type===2){ let timeout; } return function() { let context = this; let args = arguments; if(type===1){ let now = Date.now(); if (now - previous > wait) { func.apply(context, args); previous = now; } }else if(type===2){ if (!timeout) { timeout = setTimeout(() => { timeout = null; func.apply(context, args) }, wait) } } }
last
If you think this article is a little helpful to you, give it a compliment. Or you can join my development exchange group: 1025263163 learn from each other, and we will have professional technical Q & A to solve doubts
If you think this article is useful to you, please click star: http://github.crmeb.net/u/defu esteem it a favor !