摘要:在前端工作期間遇到過不少的問題,很多時候這些問題也是反復出現的,是時候將問題都記錄下來,用于回顧及避免反復浪費時間在同一問題上。
在前端工作期間遇到過不少的問題,很多時候這些問題也是反復出現的,是時候將問題都記錄下來,用于回顧及避免反復浪費時間在同一問題上。1、對象轉URL參數
var parseParam=function(param, key){ var paramStr=""; if(param instanceof String || param instanceof Number || param instanceof Boolean){ paramStr += "&" + key + "=" + encodeURIComponent(param); }else{ $.each(param,function(i){ var k = key==null ? i : key + (param instanceof Array ? "["+i+"]" : "."+i); paramStr += "&" + parseParam(this, k); }); } return paramStr.substr(1); }; var a = {a: "a", b: "b"}; console.log(parseParam(a)); // a=a&b=b console.log(parseParam(a, "person")); // person.a=a&person.b=b2、日期格式化
/** * 對Date的擴展,將 Date 轉化為指定格式的String * 月(M)、日(d)、小時(h)、分(m)、秒(s)、季度(q) 可以用 1-2 個占位符, * 年(y)可以用 1-4 個占位符,毫秒(S)只能用 1 個占位符(是 1-3 位的數字) * * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 * (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 * * @param {*} fmt */ Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小時 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.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; }3、模板字符串實現
/** * 模板字符串實現,將指定內容賦值給字符串中的參數字段 * * var url = "../img/bookList/img_{0}.png"; * url.format("a1"); * * @param {*} args */ String.prototype.format = function (args) { var result = this; if (arguments.length > 0) { if (arguments.length == 1 && typeof (args) == "object") { for (var key in args) { if (args[key] != undefined) { var reg = new RegExp("({" + key + "})", "g"); result = result.replace(reg, args[key]); } } } else { for (var i = 0; i < arguments.length; i++) { if (arguments[i] != undefined) { var reg = new RegExp("({[" + i + "]})", "g"); result = result.replace(reg, arguments[i]); } } } } return result; };4、文件下載
關于下載可以先閱讀 https://www.cnblogs.com/husts...
a標簽 & window.open()
// 瀏覽器支持能夠打開的格式,他都會默認直接在線打開(比如word或圖片),不支持的格式,他就會彈出下載提示。最好是做成.rar格式的文件 $btn.click(function(){window.open("xxxxx/file.rar");}); // 使用download屬性 下載 var isSupportDownload = "download" in document.createElement("a"); // 監測當前瀏覽器是否支持download屬性
Iframe
try { requestTaskByForm(); startTask(translateResponse, 0, iInterval, iTimeout); } catch (exp) { console.err(exp); } // config 下載JSON報文配置項;timeout 超時(毫秒),默認60000;interval 輪詢間隔(毫秒),默認100;callback 回調函數;err 異常回調;scope 作用域;url 下載servlet,默認cifjsondownload; /* * isArray * @param v * @returns {Boolean} */ function isArray(v){ return !!v && Object.prototype.toString.call(v) === "[object Array]"; }; /** * isObject * @param v * @returns {Boolean} */ function isObject(v){ return !!v && Object.prototype.toString.call(v) === "[object Object]"; }; /** * json object copy * @param o * @param c */ function apply(o,c){ if (isObject(c)) { for (var p in c) { if (o.hasOwnProperty(p.toString().toUpperCase())) o[p.toString().toUpperCase()] = c[p]; if (o.hasOwnProperty(p)) o[p] = c[p]; } } }; /** * parseJson * @param message */ function parseJson(res){ return eval("(" + res + ")"); }; /** * init json body */ function initJsonElements(){ apply(oCif, oConfig); } /** * init html elements */ function initHtmlElements(){ requestDiv = document.getElementById(reqDivId); if(!requestDiv){ requestDiv = document.createElement("div"); requestDiv.id = reqDivId; requestDiv.innerHTML = ""; requestDiv.style.display = "none"; document.body.appendChild(requestDiv); } requestForm = document.getElementById(reqFromId); if(requestForm){ document.body.removeChild(requestForm); } requestForm = document.createElement("form"); requestForm.id = reqFromId; requestForm.method = "POST"; requestForm.action = sUrl; requestForm.target = reqIframeId ; requestForm.style.display = "none"; document.body.appendChild(requestForm); }; /** * init form childs * @param data * @param parent */ function initFormElements(data, parent){ for(var c in data){ if (data.hasOwnProperty(c)){ if(isArray(data[c])){ initFormElements(data[c][0], c); }else if(isObject(data[c])){ initFormElements(data[c], c); }else{ if(parent){ var seq = document.createElement("input"); seq.type = "hidden"; seq.name = parent +"."+ c ; seq.value = data[c]; requestForm.appendChild(seq); }else{ var seq = document.createElement("input"); seq.type = "hidden"; seq.name = c ; seq.value = data[c]; requestForm.appendChild(seq); } } } } } /** * request task by form */ function requestTaskByForm(){ initJsonElements(); initHtmlElements(); initFormElements(oCif); if(requestForm)requestForm.submit(); } /** * init iframe response innerHTML */ function initResponse(){ requestIframe = document.getElementById(reqIframeId); var iframeWindow = document.getElementById(reqIframeId).contentWindow ; if(iframeWindow && iframeWindow.document && iframeWindow.document.body && iframeWindow.document.body.innerHTML){ iframeWindow.document.body.innerHTML=""; } } /** * stopTask * @param intervalId */ function stopTask(intervalId){ clearInterval(intervalId); initResponse(); }; /** * startTask * @param func * @param start * @param interval * @param end */ function startTask(func, start, interval, end){ if (!start) start = 0; if (arguments.length <= 2){ setTimeout(func, start); }else{ function repeat() { taskId = setInterval(func, interval); if (end) setTimeout(function() { stopTask(taskId); }, end); }; setTimeout(repeat, start); } }; /** * translate response */ function translateResponse(){ var iframeWindow = document.getElementById(reqIframeId).contentWindow ; if(iframeWindow && iframeWindow.document && iframeWindow.document.body && iframeWindow.document.body.innerHTML){ var res = iframeWindow.document.body.innerHTML; if(res !=""){ var response = parseJson(res); if(response.RTNCOD == "SUC0000"){ initResponse(); if(requestForm)requestForm.submit(); }else{ if(scope) fCallback.call(scope,res); else fCallback.call(this,res); stopTask(taskId); } } } };
API下載
Blob 對象只有在IE10及以上支持
$http({ url: "http://xxxx/xxxx", method: "post", data: { type: "類型", selectedCols: "選擇的列" }, dataType: "json", responseType: "arraybuffer" }).success(function (data, status, headers, config) { var fileName = name +"-" + new Date(); var blob = new Blob([data], {type: "application/vnd.ms-excel"}); if (window.navigator.msSaveOrOpenBlob){ navigator.msSaveBlob(blob, fileName);//IE } else { var link = document.createElement("a"); link.href = window.URL.createObjectURL(blob); link.download = fileName; link.click(); window.URL.revokeObjectURL(link.href); } }).then(clear()).error(function (data, status, headers, config) { console.log("error"); });
FileSaver.js 兼容性處理
https://github.com/eligrey/Fi...
Blob 對象只有在IE10及以上支持
var FileSaver = require("file-saver"); var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"}); FileSaver.saveAs(blob, "hello world.txt");
前端將table生成EXCEL
https://github.com/rainabba/j...
$("#yourHtmTable").table2excel({ exclude: ".excludeThisClass", name: "表格名稱", filename: "SomeFile" //do not include extension });5、文件上傳
https://github.com/mailru/Fil...6、防止網頁被嵌入框架
https://github.com/transloadi...
try{ top.location.hostname; if (top.location.hostname != window.location.hostname) { top.location.href =window.location.href; } }catch(e){ top.location.href = window.location.href; }7、快速排序
http://www.ruanyifeng.com/blo...8、cookie設置及獲取
//寫cookies(設置作用域) function setCookie(name,value,days){ var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); let hostname = location.hostname.substring(location.hostname.indexOf(".")+1) //設置為一級域名 document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString()+";domain="+hostname+";path=/"; } //讀取cookies function getCookie(name) { var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)) return (arr[2]); else return null; } //刪除cookies function delCookie(name){ setCookie(name, "", -1) }9、獲取URL參數
// 獲取參數值 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } // 獲取url中的參數并以對象的形式展示出來 function getUrlData(){ let url=window.location.search;//url中?之后的部分 console.log("url...."+url) url=url.substring(1);//去掉?剩下的都為a=b&c=d&e=f...模式 console.log("去掉?...."+url) let dataObj={}; if(url.indexOf("&")>-1){ url=url.split("&");//url中去掉&全部變成“a=b” “c=d” “e=f”的模式 console.log("去掉&的url..."+url) for(let i=0;i10、判斷是否為對象 // isObjectEqual export function isObjectValueEqual (a, b) { let o1 = a instanceof Object; let o2 = b instanceof Object; if (!o1 || !o2) { return a === b; } let aProps = Object.getOwnPropertyNames(a); let bProps = Object.getOwnPropertyNames(b); for (let i = 0; i < aProps.length; i++) { let t1 = aProps[i] instanceof Object; let t2 = bProps[i] instanceof Object; if (t1 && t2) { return isObjectValueEqual(aProps[i], bProps[i]); } else if (aProps[i].indexOf("_") !== 0 && a[aProps[i]] !== b[aProps[i]]) { return false; } } return true; }11、判斷IE瀏覽器版本export function IEVersion () { let userAgent = navigator.userAgent; // 取得瀏覽器的userAgent字符串 let isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; // 判斷是否IE<11瀏覽器 let isEdge = userAgent.indexOf("Edge") > -1 && !isIE; // 判斷是否IE的Edge瀏覽器 let isIE11 = userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1; if (isIE) { let reIE = new RegExp("MSIE (d+.d+);"); reIE.test(userAgent); let fIEVersion = parseFloat(RegExp["$1"]); if (fIEVersion === 7) { return 7; } else if (fIEVersion === 8) { return 8; } else if (fIEVersion === 9) { return 9; } else if (fIEVersion === 10) { return 10; } else { return 6; // IE版本<=7 } } else if (isEdge) { return "edge"; // edge } else if (isIE11) { return 11; // IE11 } else { return -1; // 不是ie瀏覽器 } }12、事件延時export function debounce (func, delay) { let timer; return function (...args) { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { func.apply(this, args); }, delay); }; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93893.html
摘要:上一篇入門筆記整理一元操作符遞增遞增分為前置遞增和后置遞增前置型兩個加號放在前面這個操作其實就是給加,上面的列子等效于前置遞增其實可以分為兩步操作,其加運算高于賦值號運算,如等效于先運行加運算為再運行賦值運算后置型兩個加號放在后面這個操作其 上一篇:js入門筆記整理 一元操作符 遞增 遞增分為前置遞增和后置遞增前置型——兩個加號(++)放在前面 var num = 1; ++n...
摘要:春節閑來無事,看看自己在上寫的文章,想不到已經篇了,各方面的都有,那就分類整理一下吧,也方便自己和別人查看。 春節閑來無事,看看自己在SegmentFault上寫的文章,想不到已經20篇了,各方面的都有,那就分類整理一下吧,也方便自己和別人查看。 CSS CSS Background-Size 屬性小記 [譯]關于垂直居中 Vertical Align 的探討 [譯]CSS 居中(...
摘要:總結主要是前端的基礎不準吐槽我把總結寫在前面特別感謝超級好用的編輯器碰到的所有坑都放在前面。 總結: 主要是前端 JS 的基礎 (╯‵□′)╯︵┻━┻不準吐槽我把總結寫在前面 特別感謝超級好用的MarkDown編輯器(づ ̄ 3 ̄)づStackEdit 1. 碰到的所有坑都放在前面 (。??)ノ JS的函數定義時有3個參數, 使用時傳入5個實參, 則前3個實參由定義的3個參數獲得...
閱讀 2833·2023-04-25 18:58
閱讀 977·2021-11-25 09:43
閱讀 1210·2021-10-25 09:46
閱讀 3494·2021-09-09 11:40
閱讀 1679·2021-08-05 09:59
閱讀 869·2019-08-29 15:07
閱讀 956·2019-08-29 12:48
閱讀 695·2019-08-29 11:19