01 为元素添加on方法

Element.prototype.on = Element.prototype.addEventListener;
NodeList.prototype.on = function (event, fn) {、[]['forEach'].call(this, function (el) {el.on(event, fn);});return this;
};

02 为元素添加trigger方法

Element.prototype.trigger = function(type, data) {var event = document.createEvent("HTMLEvents");event.initEvent(type, true, true);event.data = data || {};event.eventName = type;event.target = this;this.dispatchEvent(event);return this;
};
NodeList.prototype.trigger = function(event) {[]["forEach"].call(this, function(el) {el["trigger"](event);});return this;
};

03 转义html标签

function HtmlEncode(text) {return text.replace(/&/g, "&").replace(/\"/g, '"').replace(/</g, "<").replace(/>/g, ">");
}

04 HTML标签转义

// HTML 标签转义
// @param {Array.<DOMString>} templateData 字符串类型的tokens
// @param {...} ..vals 表达式占位符的运算结果tokens
//
function SaferHTML(templateData) {var s = templateData[0];for (var i = 1; i < arguments.length; i++) {var arg = String(arguments[i]);// Escape special characters in the substitution.s += arg.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");// Don't escape special characters in the template.s += templateData[i];}return s;
}
// 调用
var html = SaferHTML`<p>这是关于字符串模板的介绍</p>`;

05 跨浏览器绑定事件


function addEventSamp(obj, evt, fn) {if (!oTarget) {return;}if (obj.addEventListener) {obj.addEventListener(evt, fn, false);} else if (obj.attachEvent) {obj.attachEvent("on" + evt, fn);} else {oTarget["on" + sEvtType] = fn;}
}

06 加入收藏夹


function addFavorite(sURL, sTitle) {try {window.external.addFavorite(sURL, sTitle);} catch (e) {try {window.sidebar.addPanel(sTitle, sURL, "");} catch (e) {alert("加入收藏失败,请使用Ctrl+D进行添加");}}
}

07 提取页面代码中所有网址

var aa = document.documentElement.outerHTML.match(/(url\(|src=|href=)[\"\']*([^\"\'\(\)\<\>\[\] ]+)[\"\'\)]*|(http:\/\/[\w\-\.]+[^\"\'\(\)\<\>\[\] ]+)/gi).join("\r\n").replace(/^(src=|href=|url\()[\"\']*|[\"\'\>\) ]*$/gim, "");
alert(aa);

08 动态加载脚本文件

function appendscript(src, text, reload, charset) {var id = hash(src + text);if (!reload && in_array(id, evalscripts)) return;if (reload && $(id)) {$(id).parentNode.removeChild($(id));}evalscripts.push(id);var scriptNode = document.createElement("script");scriptNode.type = "text/javascript";scriptNode.id = id;scriptNode.charset = charset? charset: BROWSER.firefox? document.characterSet: document.charset;try {if (src) {scriptNode.src = src;scriptNode.onloadDone = false;scriptNode.onload = function() {scriptNode.onloadDone = true;JSLOADED[src] = 1;};scriptNode.onreadystatechange = function() {if ((scriptNode.readyState == "loaded" ||scriptNode.readyState == "complete") &&!scriptNode.onloadDone) {scriptNode.onloadDone = true;JSLOADED[src] = 1;}};} else if (text) {scriptNode.text = text;}document.getElementsByTagName("head")[0].appendChild(scriptNode);} catch (e) {}
}

09 返回顶部的通用方法

function backTop(btnId) {var btn = document.getElementById(btnId);var d = document.documentElement;var b = document.body;window.onscroll = set;btn.style.display = "none";btn.onclick = function() {btn.style.display = "none";window.onscroll = null;this.timer = setInterval(function() {d.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1);b.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1);if (d.scrollTop + b.scrollTop == 0)clearInterval(btn.timer, (window.onscroll = set));}, 10);};function set() {btn.style.display = d.scrollTop + b.scrollTop > 100 ? "block" : "none";}
}
backTop("goTop");

10 实现base64解码


function base64_decode(data) {var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var o1,o2,o3,h1,h2,h3,h4,bits,i = 0,ac = 0,dec = "",tmp_arr = [];if (!data) {return data;}data += "";do {h1 = b64.indexOf(data.charAt(i++));h2 = b64.indexOf(data.charAt(i++));h3 = b64.indexOf(data.charAt(i++));h4 = b64.indexOf(data.charAt(i++));bits = (h1 << 18) | (h2 << 12) | (h3 << 6) | h4;o1 = (bits >> 16) & 0xff;o2 = (bits >> 8) & 0xff;o3 = bits & 0xff;if (h3 == 64) {tmp_arr[ac++] = String.fromCharCode(o1);} else if (h4 == 64) {tmp_arr[ac++] = String.fromCharCode(o1, o2);} else {tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);}} while (i < data.length);dec = tmp_arr.join("");dec = utf8_decode(dec);return dec;
}

11 确认是否是键盘有效输入值

function checkKey(iKey) {if (iKey == 32 || iKey == 229) {return true;} /*空格和异常*/if (iKey > 47 && iKey < 58) {return true;} /*数字*/if (iKey > 64 && iKey < 91) {return true;} /*字母*/if (iKey > 95 && iKey < 108) {return true;} /*数字键盘1*/if (iKey > 108 && iKey < 112) {return true;} /*数字键盘2*/if (iKey > 185 && iKey < 193) {return true;} /*符号1*/if (iKey > 218 && iKey < 223) {return true;} /*符号2*/return false;
}

12 全角半角转换

//iCase: 0全到半,1半到全,其他不转化
function chgCase(sStr, iCase) {if (typeof sStr != "string" ||sStr.length <= 0 ||!(iCase === 0 || iCase == 1)) {return sStr;}var i,oRs = [],iCode;if (iCase) {/*半->全*/for (i = 0; i < sStr.length; i += 1) {iCode = sStr.charCodeAt(i);if (iCode == 32) {iCode = 12288;} else if (iCode < 127) {iCode += 65248;}oRs.push(String.fromCharCode(iCode));}} else {/*全->半*/for (i = 0; i < sStr.length; i += 1) {iCode = sStr.charCodeAt(i);if (iCode == 12288) {iCode = 32;} else if (iCode > 65280 && iCode < 65375) {iCode -= 65248;}oRs.push(String.fromCharCode(iCode));}}return oRs.join("");
}

13 版本对比

function compareVersion(v1, v2) {v1 = v1.split(".");v2 = v2.split(".");var len = Math.max(v1.length, v2.length);while (v1.length < len) {v1.push("0");}while (v2.length < len) {v2.push("0");}for (var i = 0; i < len; i++) {var num1 = parseInt(v1[i]);var num2 = parseInt(v2[i]);if (num1 > num2) {return 1;} else if (num1 < num2) {return -1;}}return 0;
}

14 压缩CSS样式代码

function compressCss(s) {//压缩代码s = s.replace(/\/\*(.|\n)*?\*\//g, ""); //删除注释s = s.replace(/\s*([\{\}\:\;\,])\s*/g, "$1");s = s.replace(/\,[\s\.\#\d]*\{/g, "{"); //容错处理s = s.replace(/;\s*;/g, ";"); //清除连续分号s = s.match(/^\s*(\S+(\s+\S+)*)\s*$/); //去掉首尾空白return s == null ? "" : s[1];
}

15 获取当前路径

var currentPageUrl = "";
if (typeof this.href === "undefined") {currentPageUrl = document.location.toString().toLowerCase();
} else {currentPageUrl = this.href.toString().toLowerCase();
}

16 字符串长度截取

function cutstr(str, len) {var temp,icount = 0,patrn = /[^\x00-\xff]/,strre = "";for (var i = 0; i < str.length; i++) {if (icount < len - 1) {temp = str.substr(i, 1);if (patrn.exec(temp) == null) {icount = icount + 1} else {icount = icount + 2}strre += temp} else {break;}}return strre + "..."
}

17 时间日期格式转换

Date.prototype.format = function(formatStr) {var str = formatStr;var Week = ["日", "一", "二", "三", "四", "五", "六"];str = str.replace(/yyyy|YYYY/, this.getFullYear());str = str.replace(/yy|YY/,this.getYear() % 100 > 9? (this.getYear() % 100).toString(): "0" + (this.getYear() % 100));str = str.replace(/MM/,this.getMonth() + 1 > 9? (this.getMonth() + 1).toString(): "0" + (this.getMonth() + 1));str = str.replace(/M/g, this.getMonth() + 1);str = str.replace(/w|W/g, Week[this.getDay()]);str = str.replace(/dd|DD/,this.getDate() > 9 ? this.getDate().toString() : "0" + this.getDate());str = str.replace(/d|D/g, this.getDate());str = str.replace(/hh|HH/,this.getHours() > 9 ? this.getHours().toString() : "0" + this.getHours());str = str.replace(/h|H/g, this.getHours());str = str.replace(/mm/,this.getMinutes() > 9? this.getMinutes().toString(): "0" + this.getMinutes());str = str.replace(/m/g, this.getMinutes());str = str.replace(/ss|SS/,this.getSeconds() > 9? this.getSeconds().toString(): "0" + this.getSeconds());str = str.replace(/s|S/g, this.getSeconds());return str;
};
// 或
Date.prototype.format = function(format) {var o = {"M+": this.getMonth() + 1, //month"d+": this.getDate(), //day"h+": this.getHours(), //hour"m+": this.getMinutes(), //minute"s+": this.getSeconds(), //second"q+": Math.floor((this.getMonth() + 3) / 3), //quarterS: this.getMilliseconds() //millisecond};if (/(y+)/.test(format))format = format.replace(RegExp.$1,(this.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o) {if (new RegExp("(" + k + ")").test(format))format = format.replace(RegExp.$1,RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));}return format;
};
alert(new Date().format("yyyy-MM-dd hh:mm:ss"));

18 跨浏览器删除事件

function delEvt(obj, evt, fn) {if (!obj) {return;}if (obj.addEventListener) {obj.addEventListener(evt, fn, false);} else if (oTarget.attachEvent) {obj.attachEvent("on" + evt, fn);} else {obj["on" + evt] = fn;}
}

19 判断是否以某个字符串结束

String.prototype.endWith = function(s) {var d = this.length - s.length;return d >= 0 && this.lastIndexOf(s) == d;
};

20 返回脚本内容

function evalscript(s) {if (s.indexOf("<script") == -1) return s;var p = /<script[^\>]*?>([^\x00]*?)<\/script>/gi;var arr = [];while ((arr = p.exec(s))) {var p1 = /<script[^\>]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script>/i;var arr1 = [];arr1 = p1.exec(arr[0]);if (arr1) {appendscript(arr1[1], "", arr1[2], arr1[3]);} else {p1 = /<script(.*?)>([^\x00]+?)<\/script>/i;arr1 = p1.exec(arr[0]);appendscript("", arr1[2], arr1[1].indexOf("reload=") != -1);}}return s;
}

21 格式化CSS样式代码

function formatCss(s) {//格式化代码s = s.replace(/\s*([\{\}\:\;\,])\s*/g, "$1");s = s.replace(/;\s*;/g, ";"); //清除连续分号s = s.replace(/\,[\s\.\#\d]*{/g, "{");s = s.replace(/([^\s])\{([^\s])/g, "$1 {\n\t$2");s = s.replace(/([^\s])\}([^\n]*)/g, "$1\n}\n$2");s = s.replace(/([^\s]);([^\s\}])/g, "$1;\n\t$2");return s;
}

22 获取cookie值

function getCookie(name) {var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));if (arr != null) return unescape(arr[2]);return null;
}

23 获得URL中GET参数值

// 用法:如果地址是 test.htm?t1=1&t2=2&t3=3, 那么能取得:GET["t1"], GET["t2"], GET["t3"]
function getGet() {querystr = window.location.href.split("?");if (querystr[1]) {GETs = querystr[1].split("&");GET = [];for (i = 0; i < GETs.length; i++) {tmp_arr = GETs.split("=");key = tmp_arr[0];GET[key] = tmp_arr[1];}}return querystr[1];
}

24 获取移动设备初始化大小

function getInitZoom() {if (!this._initZoom) {var screenWidth = Math.min(screen.height, screen.width);if (this.isAndroidMobileDevice() && !this.isNewChromeOnAndroid()) {screenWidth = screenWidth / window.devicePixelRatio;}this._initZoom = screenWidth / document.body.offsetWidth;}return this._initZoom;
}

25 获取页面高度

function getPageHeight() {var g = document,a = g.body,f = g.documentElement,d = g.compatMode == "BackCompat" ? a : g.documentElement;return Math.max(f.scrollHeight, a.scrollHeight, d.clientHeight);
}

26 获取页面scrollLeft

function getPageScrollLeft() {var a = document;return a.documentElement.scrollLeft || a.body.scrollLeft;
}

27 获取页面scrollTop

function getPageScrollTop() {var a = document;return a.documentElement.scrollTop || a.body.scrollTop;
}

28 获取页面可视宽度

function getPageViewWidth() {var d = document,a = d.compatMode == "BackCompat" ? d.body : d.documentElement;return a.clientWidth;
}

29 获取页面可视高度

function getPageViewHeight() {var d = document,a = d.compatMode == "BackCompat" ? d.body : d.documentElement;return a.clientHeight;
}

30 获取页面宽度

function getPageWidth() {var g = document,a = g.body,f = g.documentElement,d = g.compatMode == "BackCompat" ? a : g.documentElement;return Math.max(f.scrollWidth, a.scrollWidth, d.clientWidth);
}

31 获取移动设备屏幕宽度

function getScreenWidth() {var smallerSide = Math.min(screen.width, screen.height);var fixViewPortsExperiment =rendererModel.runningExperiments.FixViewport ||rendererModel.runningExperiments.fixviewport;var fixViewPortsExperimentRunning =fixViewPortsExperiment && fixViewPortsExperiment.toLowerCase() === "new";if (fixViewPortsExperiment) {if (this.isAndroidMobileDevice() && !this.isNewChromeOnAndroid()) {smallerSide = smallerSide / window.devicePixelRatio;}}return smallerSide;
}

32 获取移动设备最大化大小

function getZoom() {var screenWidth =Math.abs(window.orientation) === 90? Math.max(screen.height, screen.width): Math.min(screen.height, screen.width);if (this.isAndroidMobileDevice() && !this.isNewChromeOnAndroid()) {screenWidth = screenWidth / window.devicePixelRatio;}var FixViewPortsExperiment =rendererModel.runningExperiments.FixViewport ||rendererModel.runningExperiments.fixviewport;var FixViewPortsExperimentRunning =FixViewPortsExperiment &&(FixViewPortsExperiment === "New" || FixViewPortsExperiment === "new");if (FixViewPortsExperimentRunning) {return screenWidth / window.innerWidth;} else {return screenWidth / document.body.offsetWidth;}
}

33 获取网页被卷去的位置

function getScrollXY() {return document.body.scrollTop? {x: document.body.scrollLeft,y: document.body.scrollTop}: {x: document.documentElement.scrollLeft,y: document.documentElement.scrollTop};
}

34 判断是否为数字类型

function isDigit(value) {var patrn = /^[0-9]*$/;if (patrn.exec(value) == null || value == "") {return false;} else {return true;}
}

35 检验URL链接是否有效

function getUrlState(URL) {var xmlhttp = new ActiveXObject("microsoft.xmlhttp");xmlhttp.Open("GET", URL, false);try {xmlhttp.Send();} catch (e) {} finally {var result = xmlhttp.responseText;if (result) {if (xmlhttp.Status == 200) {return true;} else {return false;}} else {return false;}}
}

36 获取URL上的参数

// 获取URL中的某参数值,不区分大小写
// 获取URL中的某参数值,不区分大小写,
// 默认是取'hash'里的参数,
// 如果传其他参数支持取‘search’中的参数
// @param {String} name 参数名称
export function getUrlParam(name, type = "hash") {let newName = name,reg = new RegExp("(^|&)" + newName + "=([^&]*)(&|$)", "i"),paramHash = window.location.hash.split("?")[1] || "",paramSearch = window.location.search.split("?")[1] || "",param;type === "hash" ? (param = paramHash) : (param = paramSearch);let result = param.match(reg);if (result != null) {return result[2].split("/")[0];}return null;
}

37 获取窗体可见范围的宽与高

function getViewSize() {var de = document.documentElement;var db = document.body;var viewW = de.clientWidth == 0 ? db.clientWidth : de.clientWidth;var viewH = de.clientHeight == 0 ? db.clientHeight : de.clientHeight;return Array(viewW, viewH);
}

38 判断是否安卓移动设备访问

function isAndroidMobileDevice() {return /android/i.test(navigator.userAgent.toLowerCase());
}

39 判断是否苹果移动设备访问

function isAppleMobileDevice() {return /iphone|ipod|ipad|Macintosh/i.test(navigator.userAgent.toLowerCase());
}

40 是否是某类手机型号

// 用devicePixelRatio和分辨率判断
const isIphonex = () => {// X XS, XS Max, XRconst xSeriesConfig = [{devicePixelRatio: 3,width: 375,height: 812},{devicePixelRatio: 3,width: 414,height: 896},{devicePixelRatio: 2,width: 414,height: 896}];// h5if (typeof window !== "undefined" && window) {const isIOS = /iphone/gi.test(window.navigator.userAgent);if (!isIOS) return false;const { devicePixelRatio, screen } = window;const { width, height } = screen;return xSeriesConfig.some(item =>item.devicePixelRatio === devicePixelRatio &&item.width === width &&item.height === height);}return false;
};

41 判断是否是移动设备访问

function isMobileUserAgent() {return /iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase());
}

42 判断是否移动设备

function isMobile() {if (typeof this._isMobile === "boolean") {return this._isMobile;}var screenWidth = this.getScreenWidth();var fixViewPortsExperiment =rendererModel.runningExperiments.FixViewport ||rendererModel.runningExperiments.fixviewport;var fixViewPortsExperimentRunning =fixViewPortsExperiment && fixViewPortsExperiment.toLowerCase() === "new";if (!fixViewPortsExperiment) {if (!this.isAppleMobileDevice()) {screenWidth = screenWidth / window.devicePixelRatio;}}var isMobileScreenSize = screenWidth < 600;var isMobileUserAgent = false;this._isMobile = isMobileScreenSize && this.isTouchScreen();return this._isMobile;
}

43 判断是否手机号码

function isMobileNumber(e) {var i ="134,135,136,137,138,139,150,151,152,157,158,159,187,188,147,182,183,184,178",n = "130,131,132,155,156,185,186,145,176",a = "133,153,180,181,189,177,173,170",o = e || "",r = o.substring(0, 3),d = o.substring(0, 4),s =!!/^1\d{10}$/.test(o) &&(n.indexOf(r) >= 0? "联通": a.indexOf(r) >= 0? "电信": "1349" == d? "电信": i.indexOf(r) >= 0? "移动": "未知");return s;
}

44 判断鼠标是否移出事件

function isMouseOut(e, handler) {if (e.type !== "mouseout") {return false;}var reltg = e.relatedTarget? e.relatedTarget: e.type === "mouseout"? e.toElement: e.fromElement;while (reltg && reltg !== handler) {reltg = reltg.parentNode;}return reltg !== handler;
}

45 判断是否Touch屏幕

function isTouchScreen() {return ("ontouchstart" in window ||(window.DocumentTouch && document instanceof DocumentTouch));
}

46 判断是否为网址


function isURL(strUrl) {var regular = /^\b(((https?|ftp):\/\/)?[-a-z0-9]+(\.[-a-z0-9]+)*\.(?:com|edu|gov|int|mil|net|org|biz|info|name|museum|asia|coop|aero|[a-z][a-z]|((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d))\b(\/[-a-z0-9_:\@&?=+,.!\/~%\$]*)?)$/i;if (regular.test(strUrl)) {return true;} else {return false;}
}

47 判断是否打开视窗

function isViewportOpen() {return !!document.getElementById("wixMobileViewport");
}

48 加载样式文件

function loadStyle(url) {try {document.createStyleSheet(url);} catch (e) {var cssLink = document.createElement("link");cssLink.rel = "stylesheet";cssLink.type = "text/css";cssLink.href = url;var head = document.getElementsByTagName("head")[0];head.appendChild(cssLink);}
}

49 替换地址栏

function locationReplace(url) {if (history.replaceState) {history.replaceState(null, document.title, url);history.go(0);} else {location.replace(url);}
}

50 解决offsetX兼容性问题

// 针对火狐不支持offsetX/Y
function getOffset(e) {var target = e.target, // 当前触发的目标对象eventCoord,pageCoord,offsetCoord;// 计算当前触发元素到文档的距离pageCoord = getPageCoord(target);// 计算光标到文档的距离eventCoord = {X: window.pageXOffset + e.clientX,Y: window.pageYOffset + e.clientY};// 相减获取光标到第一个定位的父元素的坐标offsetCoord = {X: eventCoord.X - pageCoord.X,Y: eventCoord.Y - pageCoord.Y};return offsetCoord;
}
function getPageCoord(element) {var coord = { X: 0, Y: 0 };// 计算从当前触发元素到根节点为止,// 各级 offsetParent 元素的 offsetLeft 或 offsetTop 值之和while (element) {coord.X += element.offsetLeft;coord.Y += element.offsetTop;element = element.offsetParent;}return coord;
}

51 打开一个窗体通用方法

function openWindow(url, windowName, width, height) {var x = parseInt(screen.width / 2.0) - width / 2.0;var y = parseInt(screen.height / 2.0) - height / 2.0;var isMSIE = navigator.appName == "Microsoft Internet Explorer";if (isMSIE) {var p = "resizable=1,location=no,scrollbars=no,width=";p = p + width;p = p + ",height=";p = p + height;p = p + ",left=";p = p + x;p = p + ",top=";p = p + y;retval = window.open(url, windowName, p);} else {var win = window.open(url,"ZyiisPopup","top=" +y +",left=" +x +",scrollbars=" +scrollbars +",dialog=yes,modal=yes,width=" +width +",height=" +height +",resizable=no");eval("try { win.resizeTo(width, height); } catch(e) { }");win.focus();}
}

52 将键值对拼接成URL带参数

export default const fnParams2Url = obj=> {let aUrl = []let fnAdd = function(key, value) {return key + '=' + value}for (var k in obj) {aUrl.push(fnAdd(k, obj[k]))}return encodeURIComponent(aUrl.join('&'))}

53 去掉url前缀

function removeUrlPrefix(a) {a = a.replace(/:/g, ":").replace(/./g, ".").replace(///g, "/");while (trim(a).toLowerCase().indexOf("http://") == 0) {a = trim(a.replace(/http:\/\//i, ""));}return a;
}

54 resize的操作

(function() {var fn = function() {var w = document.documentElement? document.documentElement.clientWidth: document.body.clientWidth,r = 1255,b = Element.extend(document.body),classname = b.className;if (w < r) {//当窗体的宽度小于1255的时候执行相应的操作} else {//当窗体的宽度大于1255的时候执行相应的操作}};if (window.addEventListener) {window.addEventListener("resize", function() {fn();});} else if (window.attachEvent) {window.attachEvent("onresize", function() {fn();});}fn();
})();

55 替换全部

String.prototype.replaceAll = function(s1, s2) {return this.replace(new RegExp(s1, "gm"), s2);
};

56 设置cookie值

function setCookie(name, value, Hours) {var d = new Date();var offset = 8;var utc = d.getTime() + d.getTimezoneOffset() * 60000;var nd = utc + 3600000 * offset;var exp = new Date(nd);exp.setTime(exp.getTime() + Hours * 60 * 60 * 1000);document.cookie =name +"=" +escape(value) +";path=/;expires=" +exp.toGMTString() +";domain=360doc.com;";
}

57 滚动到顶部

// 使用document.documentElement.scrollTop 或 document.body.scrollTop 获取到顶部的距离,从顶部
// 滚动一小部分距离。使用window.requestAnimationFrame()来滚动。
// @example
// scrollToTop();
function scrollToTop() {var c = document.documentElement.scrollTop || document.body.scrollTop;if (c > 0) {window.requestAnimationFrame(scrollToTop);window.scrollTo(0, c - c / 8);}
}

58 设为首页

function setHomepage() {if (document.all) {document.body.style.behavior = "url(#default#homepage)";document.body.setHomePage("http://w3cboy.com");} else if (window.sidebar) {if (window.netscape) {try {netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");} catch (e) {alert("该操作被浏览器拒绝,如果想启用该功能,请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true");}}var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);prefs.setCharPref("browser.startup.homepage", "http://w3cboy.com");}
}

59 按字母排序,对每行进行数组排序

function setSort() {var text = K1.value.split(/[\r\n]/).sort().join("\r\n"); //顺序var test = K1.value.split(/[\r\n]/).sort().reverse().join("\r\n"); //反序K1.value = K1.value != text ? text : test;
}

60 延时执行

// 比如 sleep(1000) 意味着等待1000毫秒,还可从 Promise、Generator、Async/Await 等角度实现。
// Promise
const sleep = time => {return new Promise(resolve => setTimeout(resolve, time));
};
sleep(1000).then(() => {console.log(1);
});
// Generator
function* sleepGenerator(time) {yield new Promise(function(resolve, reject) {setTimeout(resolve, time);});
}
sleepGenerator(1000).next().value.then(() => {console.log(1);});
//async
function sleep(time) {return new Promise(resolve => setTimeout(resolve, time));
}
async function output() {let out = await sleep(1000);console.log(1);return out;
}
output();
function sleep(callback, time) {if (typeof callback === "function") {setTimeout(callback, time);}
}
function output() {console.log(1);
}
sleep(output, 1000);

61 清除脚本内容

function stripscript(s) {return s.replace(/<script.*?>.*?<\/script>/gi, "");
}

62 判断是否以某个字符串开头

String.prototype.startWith = function(s) {return this.indexOf(s) == 0;
};

63 时间个性化输出功能

/*
1、< 60s, 显示为“刚刚”
2、>= 1min && < 60 min, 显示与当前时间差“XX分钟前”
3、>= 60min && < 1day, 显示与当前时间差“今天 XX:XX”
4、>= 1day && < 1year, 显示日期“XX月XX日 XX:XX”
5、>= 1year, 显示具体日期“XXXX年XX月XX日 XX:XX”
*/
function timeFormat(time) {var date = new Date(time),curDate = new Date(),year = date.getFullYear(),month = date.getMonth() + 10,day = date.getDate(),hour = date.getHours(),minute = date.getMinutes(),curYear = curDate.getFullYear(),curHour = curDate.getHours(),timeStr;if (year < curYear) {timeStr = year + "年" + month + "月" + day + "日 " + hour + ":" + minute;} else {var pastTime = curDate - date,pastH = pastTime / 3600000;if (pastH > curHour) {timeStr = month + "月" + day + "日 " + hour + ":" + minute;} else if (pastH >= 1) {timeStr = "今天 " + hour + ":" + minute + "分";} else {var pastM = curDate.getMinutes() - minute;if (pastM > 1) {timeStr = pastM + "分钟前";} else {timeStr = "刚刚";}}}return timeStr;
}

64 半角转换为全角函数

function toDBC(str) {var result = "";for (var i = 0; i < str.length; i++) {code = str.charCodeAt(i);if (code >= 33 && code <= 126) {result += String.fromCharCode(str.charCodeAt(i) + 65248);} else if (code == 32) {result += String.fromCharCode(str.charCodeAt(i) + 12288 - 32);} else {result += str.charAt(i);}}return result;
}

65 全角转换为半角函数

function toCDB(str) {var result = "";for (var i = 0; i < str.length; i++) {code = str.charCodeAt(i);if (code >= 65281 && code <= 65374) {result += String.fromCharCode(str.charCodeAt(i) - 65248);} else if (code == 12288) {result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);} else {result += str.charAt(i);}}return result;
}

66 金额大写转换函数

function transform(tranvalue) {try {var i = 1;var dw2 = new Array("", "万", "亿"); //大单位var dw1 = new Array("拾", "佰", "仟"); //小单位var dw = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");//整数部分用//以下是小写转换成大写显示在合计大写的文本框中//分离整数与小数var source = splits(tranvalue);var num = source[0];var dig = source[1];//转换整数部分var k1 = 0; //计小单位var k2 = 0; //计大单位var sum = 0;var str = "";var len = source[0].length; //整数的长度for (i = 1; i <= len; i++) {var n = source[0].charAt(len - i); //取得某个位数上的数字var bn = 0;if (len - i - 1 >= 0) {bn = source[0].charAt(len - i - 1); //取得某个位数前一位上的数字}sum = sum + Number(n);if (sum != 0) {str = dw[Number(n)].concat(str); //取得该数字对应的大写数字,并插入到str字符串的前面if (n == "0") sum = 0;}if (len - i - 1 >= 0) {//在数字范围内if (k1 != 3) {//加小单位if (bn != 0) {str = dw1[k1].concat(str);}k1++;} else {//不加小单位,加大单位k1 = 0;var temp = str.charAt(0);if (temp == "万" || temp == "亿")//若大单位前没有数字则舍去大单位str = str.substr(1, str.length - 1);str = dw2[k2].concat(str);sum = 0;}}if (k1 == 3) {//小单位到千则大单位进一k2++;}}//转换小数部分var strdig = "";if (dig != "") {var n = dig.charAt(0);if (n != 0) {strdig += dw[Number(n)] + "角"; //加数字}var n = dig.charAt(1);if (n != 0) {strdig += dw[Number(n)] + "分"; //加数字}}str += "元" + strdig;} catch (e) {return "0元";}return str;
}
//拆分整数与小数
function splits(tranvalue) {var value = new Array("", "");temp = tranvalue.split(".");for (var i = 0; i < temp.length; i++) {value = temp;}return value;
}

67 清除空格

String.prototype.trim = function() {var reExtraSpace = /^\s*(.*?)\s+$/;return this.replace(reExtraSpace, "$1");
};
// 清除左空格
function ltrim(s) {return s.replace(/^(\s*| *)/, "");
}
// 清除右空格
function rtrim(s) {return s.replace(/(\s*| *)$/, "");
}

68 随机数时间戳

function uniqueId() {var a = Math.random,b = parseInt;return (Number(new Date()).toString() + b(10 * a()) + b(10 * a()) + b(10 * a()));
}

69 实现utf8解码

function utf8_decode(str_data) {var tmp_arr = [],i = 0,ac = 0,c1 = 0,c2 = 0,c3 = 0;str_data += "";while (i < str_data.length) {c1 = str_data.charCodeAt(i);if (c1 < 128) {tmp_arr[ac++] = String.fromCharCode(c1);i++;} else if (c1 > 191 && c1 < 224) {c2 = str_data.charCodeAt(i + 1);tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));i += 2;} else {c2 = str_data.charCodeAt(i + 1);c3 = str_data.charCodeAt(i + 2);tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));i += 3;}}return tmp_arr.join("");
}

以下的几个函数,用作常见的输入值校验和替换操作,主要针对中国大陆地区的校验规则:

70 校验是否为一个数字,以及该数字小数点位数是否与参数floats一致

校验规则:

  • 若参数floats有值,则校验该数字小数点后的位数。
  • 若参数floats没有值,则仅仅校验是否为数字。
function isNum(value,floats=null){let regexp = new RegExp(`^[1-9][0-9]*.[0-9]{${floats}}$|^0.[0-9]{${floats}}$`);return typeof value === 'number' && floats?regexp.test(String(value)):true;
}
function anysicIntLength(minLength,maxLength){let result_str = '';if(minLength){switch(maxLength){case undefined:result_str = result_str.concat(`{${minLength-1}}`);break;case null:result_str = result_str.concat(`{${minLength-1},}`);break;default:result_str = result_str.concat(`{${minLength-1},${maxLength-1}}`);}}else{result_str = result_str.concat('*');}return result_str;
}

71 校验是否为非零的正整数

function isInt(value,minLength=null,maxLength=undefined){if(!isNum(value)) return false;let regexp = new RegExp(`^-?[1-9][0-9]${anysicIntLength(minLength,maxLength)}$`);return regexp.test(value.toString());
}

72 校验是否为非零的正整数

function isPInt(value,minLength=null,maxLength=undefined) {if(!isNum(value)) return false;let regexp = new RegExp(`^[1-9][0-9]${anysicIntLength(minLength,maxLength)}$`);return regexp.test(value.toString());
}

73 校验是否为非零的负整数

function isNInt(value,minLength=null,maxLength=undefined){if(!isNum(value)) return false;let regexp = new RegExp(`^-[1-9][0-9]${anysicIntLength(minLength,maxLength)}$`);return regexp.test(value.toString());
}

74 校验整数是否在取值范围内

校验规则:

  • minInt为在取值范围中最小的整数
  • maxInt为在取值范围中最大的整数
function checkIntRange(value,minInt,maxInt=9007199254740991){return Boolean(isInt(value) && (Boolean(minInt!=undefined && minInt!=null)?value>=minInt:true) && (value<=maxInt));
}

75 校验是否为中国大陆传真或固定电话号码

function isFax(str) {return /^([0-9]{3,4})?[0-9]{7,8}$|^([0-9]{3,4}-)?[0-9]{7,8}$/.test(str);
}

76 校验是否为中国大陆手机号

function isTel(value) {return /^1[3,4,5,6,7,8,9][0-9]{9}$/.test(value.toString());
}

77 校验是否为邮箱地址

function isEmail(str) {return /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(str);
}

78 校验是否为QQ号码

校验规则:

  • 非0开头的5位-13位整数
function isQQ(value) {return /^[1-9][0-9]{4,12}$/.test(value.toString());
}

79 校验是否为网址

校验规则:

  • 以https://、http://、ftp://、rtsp://、mms://开头、或者没有这些开头
  • 可以没有www开头(或其他二级域名),仅域名
  • 网页地址中允许出现/%*?@&等其他允许的符
function isURL(str) {return /^(https:\/\/|http:\/\/|ftp:\/\/|rtsp:\/\/|mms:\/\/)?[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/.test(str);
}

80 校验是否为不含端口号的IP地址

校验规则:

IP格式为xxx.xxx.xxx.xxx,每一项数字取值范围为0-255

除0以外其他数字不能以0开头,比如02

function isIP(str) {return /^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$/.test(str);
}

81 校验是否为IPv6地址

校验规则:

支持IPv6正常格式

支持IPv6压缩格式

function isIPv6(str){return Boolean(str.match(/:/g)?str.match(/:/g).length<=7:false && /::/.test(str)?/^([\da-f]{1,4}(:|::)){1,6}[\da-f]{1,4}$/i.test(str):/^([\da-f]{1,4}:){7}[\da-f]{1,4}$/i.test(str));
}

82 校验是否为中国大陆第二代居民身份证

校验规则:

共18位,最后一位可为X(大小写均可)

不能以0开头

出生年月日会进行校验:年份只能为18/19/2*开头,月份只能为01-12,日只能为01-31

function isIDCard(str){return /^[1-9][0-9]{5}(18|19|(2[0-9]))[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}[0-9Xx]$/.test(str);
}

83 校验是否为中国大陆邮政编码

参数value为数字或字符串

校验规则:

  • 共6位,且不能以0开头
function isPostCode(value){return /^[1-9][0-9]{5}$/.test(value.toString());
}

84 校验两个参数是否完全相同,包括类型

校验规则:

  • 值相同,数据类型也相同
function same(firstValue,secondValue){return firstValue===secondValue;
}

85 校验字符的长度是否在规定的范围内

校验规则:

  • minInt为在取值范围中最小的长度
  • maxInt为在取值范围中最大的长度
function lengthRange(str,minLength,maxLength=9007199254740991) {return Boolean(str.length >= minLength && str.length <= maxLength);
}

86 校验字符是否以字母开头

校验规则:

  • 必须以字母开头
  • 开头的字母不区分大小写
function letterBegin(str){return /^[A-z]/.test(str);
}

87 校验字符是否为纯数字(整数)

校验规则:

  • 字符全部为正整数(包含0)
  • 可以以0开头
function pureNum(str) {return /^[0-9]*$/.test(str);
}
function anysicPunctuation(str){if(!str) return null;let arr = str.split('').map(item => {return item = '\\' + item;});return arr.join('|');
}
function getPunctuation(str){return anysicPunctuation(str) || '\\~|\\`|\\!|\\@|\\#|\\$|\\%|\\^|\\&|\\*|\\(|\\)|\\-|\\_|\\+|\\=|\\||\\\|\\[|\\]|\\{|\\}|\\;|\\:|\\"|\\\'|\\,|\\<|\\.|\\>|\\/|\\?';
}
function getExcludePunctuation(str){let regexp = new RegExp(`[${anysicPunctuation(str)}]`,'g');return getPunctuation(' ~`!@#$%^&*()-_+=\[]{};:"\',<.>/?'.replace(regexp,''));
}

88 返回字符串构成种类(字母,数字,标点符号)的数量

LIP缩写的由来:L(letter 字母) + I(uint 数字) + P(punctuation 标点符号)

参数punctuation的说明:

  • punctuation指可接受的标点符号集
  • 若需自定义符号集,例如“仅包含中划线和下划线”,将参数设置为"-_"即可
  • 若不传值或默认为null,则内部默认标点符号集为除空格外的其他英文标点符号:~`!@#$%^&*()-_+=[]{};:"',<.>/?
function getLIPTypes(str,punctuation=null){let p_regexp = new RegExp('['+getPunctuation(punctuation)+']');return /[A-z]/.test(str) + /[0-9]/.test(str) + p_regexp.test(str);
}

89 校验字符串构成的种类数量是否大于或等于参数num的值。

通常用来校验用户设置的密码复杂程度。

校验规则:

  • 参数num为需要构成的种类(字母、数字、标点符号),该值只能是1-3。
  • 默认参数num的值为1,即表示:至少包含字母,数字,标点符号中的1种
  • 若参数num的值为2,即表示:至少包含字母,数字,标点符号中的2种
  • 若参数num的值为3,即表示:必须同时包含字母,数字,标点符号
  • 参数punctuation指可接受的标点符号集,具体设定可参考getLIPTypes()方法中关于标点符号集的解释。
function pureLIP(str,num=1,punctuation=null){let regexp = new RegExp(`[^A-z0-9|${getPunctuation(punctuation)}]`);return Boolean(!regexp.test(str) && getLIPTypes(str,punctuation)>= num);
}

90 清除所有空格

function clearSpaces(str){return str.replace(/[ ]/g,'');
}

91 清除所有中文字符(包括中文标点符号)

function clearCNChars(str){return str.replace(/[\u4e00-\u9fa5]/g,'');
}

92 清除所有中文字符及空格

function clearCNCharsAndSpaces(str){return str.replace(/[\u4e00-\u9fa5 ]/g,'');
}

93 除保留标点符号集以外,清除其他所有英文的标点符号(含空格)

全部英文标点符号为:~`!@#$%^&*()-_+=[]{};:"',<.>/?

参数excludePunctuation指需要保留的标点符号集,例如若传递的值为'_',即表示清除_以外的其他所有英文标点符号。

function clearPunctuation(str,excludePunctuation=null){let regexp = new RegExp(`[${getExcludePunctuation(excludePunctuation)}]`,'g');return str.replace(regexp,'');
}

94 校验是否包含空格

function haveSpace(str) {return /[ ]/.test(str);
}

95 校验是否包含中文字符(包括中文标点符号)

function haveCNChars(str){return /[\u4e00-\u9fa5]/.test(str);
}

前端大佬们都在使用的JavaScript工具函数宝典-内含95个工具函数方法相关推荐

  1. “绿宝书”好在哪?前端大佬们都在推荐

    随着多设备.浏览器和Web标准的演变革命,前端正在成为兼顾逻辑.性能.交互.体验的综合性岗位.作为一名前端工程师,JavaScript 你一定每天都在用.但是,JavaScript 有诸多复杂微妙的机 ...

  2. 推荐几个干货超多助你成长的前端大佬

    不得不说,如今比前些年学习资料多很多了. 现在的前端公众号也挺多的,这里推荐几个前端大佬运营的公众号,都是聚焦前端垂直领域的优质公众号,关注这些公众号至少可以: 1.了解现在前端技术发展情况和未来发展 ...

  3. 前端大佬谈国产开源:VUE 的成功在于社区运营

    喜欢就关注我们吧! 近日,国内首个开源软件基金会 -- 开放原子基金会在深圳国际开源谷举办了 TOC 圆桌论坛.论坛上,基金会 TOC 之一.国内知名前端大佬贺师俊表达了一些有趣的观点,阐述了自己对于 ...

  4. 前端编程编辑器都有哪些 ?

    目录 Sublime Text webstorm ATOM Brackets Hbuilder VSCode Notepad++ Dreamweaver CC Sublime Text 介绍 是一个代 ...

  5. 前端学习路线-学习web前端的最 佳路线:必备javascript书籍【含红宝书和绿皮书、黄宝书等】

    需要资料的同学可以给我留言,留下你的邮箱即可. 跟着前端大佬推荐的路线学习进阶: html和css 关于最基础的html和css可以看看在线网站菜鸟教程: HTML 教程 | 菜鸟教程HTML 教程- ...

  6. 前端三大技术 HTML、CSS、JavaScript 快速入门手册

    听到前端技术,不少朋友一定会感到有些陌生.但其实,前端,你每天都在接触. 你正在使用的APP,你正在浏览的网页,这些你能看到的界面,都属于前端. 而前端最重要的三大技术,HTML,CSS,JavaSc ...

  7. 真诚推荐7个能助你成长的前端大佬

    不得不说,如今比前些年学习资料多很多了. 现在的前端公众号也挺多的,这里推荐几个前端大佬运营的公众号,都是聚焦前端垂直领域的优质公众号,关注这些公众号至少可以: 1.了解现在前端技术发展情况和未来发展 ...

  8. 【干货分享】前端面试知识点锦集03(JavaScript篇)——附答案

    三.JavaScript部分 1.谈谈你对Ajax的理解?(概念.特点.作用) AJAX全称为"Asynchronous JavaScript And XML"(异步JavaScr ...

  9. 前端的葵花宝典 - 红宝书《JavaScript高级程序设计(第4版)》学习笔记

    目录 前言 1.第1章 什么是JavaScript 1.1 ECMAScript 1.2 DOM 1.3 BOM 小结 第2章 HTML 中的JavaScript 2.1 < script &g ...

  10. 前端必须学会的5个原生JavaScript对象方法

    前端必须学会的5个原生JavaScript对象方法 JavaScript 随着node.js和基于JavaScript的各种框架的诞生,JavaScript在当今的互联网越来越受到人们的重视,今天我们 ...

最新文章

  1. javascript的特点
  2. Android Studion有用的快捷键
  3. swoole的process模块创建和使用子进程
  4. x-shell 通过堡垒机连接 ssh多个机器 自动化脚本
  5. 虚拟机NAT模式联网
  6. Shiro————会话管理
  7. html5--6-50 动画效果-变形
  8. Linux磁盘分区详解(fdisk)
  9. 初中英语听力软件测试,初中英语听力训练
  10. Android SharedPreference最佳实践
  11. php将数组转成字符串的,php怎样将数组转化成字符串
  12. 《设计模式》组合模式---伊利工厂
  13. 几款脑力训练软件分析与推荐
  14. 【计算机网络】Web服务器的配置
  15. python代替按键精灵 游戏内失灵_按键精灵是如何做到不被程序屏蔽的?python34中如何将命令行传递给python脚 节流参数转换为unicode字符串...
  16. SPDK Delay Bdev 介绍及应用实例
  17. Java-JSOUP(爬虫)
  18. CPU使用率终于正常了——记一次订餐统事故处理
  19. OSPF规划两大模型:双塔奇兵、犬牙交错
  20. 【cmd】CMD中Pushd和Popd命令的用法

热门文章

  1. 『动态规划』最大子段和
  2. 前端项目部署到服务器
  3. 网站服务器建立数据库连接时出错,修复Wordpress博客网站“建立数据库连接时出错”错误记录 | 科技爱好者博客 -专注于树莓派(Raspberry Pi)...
  4. 智慧城市是啥?能少点雾霾吗?
  5. 非参数检验统计量分析
  6. 与孩子一起学编程01章
  7. 木马群起攻击Word文档 360补丁保护办公安全
  8. 图片模糊处理批量生产模糊数据集
  9. PRML第三章3.2
  10. 纯JavaScript实现鼠标拖尾效果