當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript 常用工具函数
生活随笔
收集整理的這篇文章主要介紹了
JavaScript 常用工具函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1. 為元素添加 on 方法
- 2. 為元素添加trigger方法
- 3. 轉義 HTML 標簽
- 4. HTML 標簽轉義
- 5. 跨瀏覽器綁定事件
- 5. 加入收藏夾
- 7. 提取頁面代碼中所有網址
- 8. 動態加載腳本文件
- 9. 返回頂部的通用方法
- 10. 實現base64解碼
- 11. 確認是否是鍵盤有效輸入值
- 12. 全角半角轉換
- 13. 版本對比
- 14. 壓縮CSS樣式代碼
- 15. 獲取當前路徑
- 16. 字符串長度截取
- 17. 時間日期格式轉換
- 18. 跨瀏覽器刪除事件
- 19. 判斷是否以某個字符串結束
- 20. 返回腳本內容
- 21. 格式化CSS樣式代碼
- 22. 獲取Cookie值
- 23. 獲得URL中GET參數值
- 24. 獲取移動設備初始化大小
- 25. 獲取頁面高度
- 26. 獲取頁面scrollLeft
- 27. 獲取頁面scrollTop
- 28. 獲取頁面可視高度
- 29. 獲取頁面可視寬度
- 30. 獲取頁面寬度
- 31. 獲取移動設備屏幕寬度
- 32. 獲取網頁被卷去的位置
- 33. 獲取URL上的參數
- 34. 檢驗URL鏈接是否有效
- 35. 獲取窗體可見范圍的寬與高
- 36. 獲取移動設備最大化大小
- 37. 判斷是否安卓移動設備訪問
- 38. 判斷是否蘋果移動設備訪問
- 39. 判斷是否為數字類型
- 40. 是否是某類手機型號
- 41. 判斷是否移動設備
- 42. 判斷是否手機號碼
- 43. 判斷是否是移動設備訪問
- 44. 判斷鼠標是否移出事件
- 45. 判斷是否Touch屏幕
- 46. 判斷是否為網址
- 47. 判斷是否打開視窗
- 48. 加載樣式文件
- 49. 替換地址欄
- 50. 解決offsetX兼容性問題
- 51. 打開一個窗體通用方法
- 52. 將鍵值對拼接成URL帶參數
- 53. 去掉url前綴
- 54. 替換全部
- 55. resize的操作
- 56. 滾動到頂部
- 57. 設置Cookie值
- 58. 設為首頁
- 59. 按字母排序,對每行進行數組排序
- 60. 延時執行
- 61. 判斷是否以某個字符串開頭
- 62. 清除腳本內容
- 63. 時間個性化輸出功能
- 64. 全角轉換為半角函數
- 65. 半角轉換為全角
- 66. 金額大寫轉換函數
- 67. 清除空格
- 68. 隨機數時間戳
- 69. 實現utf8解碼
1. 為元素添加 on 方法
Element.prototype.on = Element.prototype.addEventListener;NodeList.prototype.on = function (event, fn) {、[]['forEach'].call(this, function (el) {el.on(event, fn);});return this; };2. 為元素添加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; };3. 轉義 HTML 標簽
function HtmlEncode(text) {return text.replace(/&/g, "&").replace(/\"/g, '"').replace(/</g, "<").replace(/>/g, ">"); }4. 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>`;5. 跨瀏覽器綁定事件
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;} }5. 加入收藏夾
function addFavorite(sURL, sTitle) {try {window.external.addFavorite(sURL, sTitle);} catch (e) {try {window.sidebar.addPanel(sTitle, sURL, "");} catch (e) {alert("加入收藏失敗,請使用Ctrl+D進行添加");}} }7. 提取頁面代碼中所有網址
var aa = document.documentElement.outerHTML.match(/(url\(|src=|href=)[\"\']*([^\"\'\(\)\<\>\[\] ]+)[\"\'\)]*|(http:\/\/[\w\-\.]+[^\"\'\(\)\<\>\[\] ]+)/gi).join("\r\n").replace(/^(src=|href=|url\()[\"\']*|[\"\'\>\) ]*$/gim, ""); alert(aa);8. 動態加載腳本文件
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) {} }9. 返回頂部的通用方法
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 getPageViewHeight() {var d = document,a = d.compatMode == "BackCompat" ? d.body : d.documentElement;return a.clientHeight; }29. 獲取頁面可視寬度
function getPageViewWidth() {var d = document,a = d.compatMode == "BackCompat" ? d.body : d.documentElement;return a.clientWidth; }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 getScrollXY() {return document.body.scrollTop? {x: document.body.scrollLeft,y: document.body.scrollTop}: {x: document.documentElement.scrollLeft,y: document.documentElement.scrollTop}; }33. 獲取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; }34. 檢驗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;}} }35. 獲取窗體可見范圍的寬與高
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); }36. 獲取移動設備最大化大小
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;} }37. 判斷是否安卓移動設備訪問
function isAndroidMobileDevice() {return /android/i.test(navigator.userAgent.toLowerCase()); }38. 判斷是否蘋果移動設備訪問
function isAppleMobileDevice() {return /iphone|ipod|ipad|Macintosh/i.test(navigator.userAgent.toLowerCase()); }39. 判斷是否為數字類型
function isDigit(value) {var patrn = /^[0-9]*$/;if (patrn.exec(value) == null || value == "") {return false;} else {return true;} }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 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; }42. 判斷是否手機號碼
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; }43. 判斷是否是移動設備訪問
function isMobileUserAgent() {return /iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase()); }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. 替換全部
String.prototype.replaceAll = function(s1, s2) {return this.replace(new RegExp(s1, "gm"), s2); };55. 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(); })();56. 滾動到頂部
// 使用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);} }57. 設置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;"; }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. 判斷是否以某個字符串開頭
String.prototype.startWith = function(s) {return this.indexOf(s) == 0; };62. 清除腳本內容
function stripscript(s) {return s.replace(/<script.*?>.*?<\/script>/gi, ""); }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 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; }65. 半角轉換為全角
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; }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(""); }總結
以上是生活随笔為你收集整理的JavaScript 常用工具函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java-所有类型的Class对象
- 下一篇: Java-元注解