一、時間格式化等方法app
推薦使用 moment.js 的庫文件異步
三、模板、循環、MAP等方法使用函數
underscode.js 的方法性能
四、表單序列化成JSON this
$.fn.serializeJson = function() { var serializeObj = {}; var array = this.serializeArray(); var str = this.serialize(); $(array).each(function() { if (serializeObj[this.name]) { if ($.isArray(serializeObj[this.name])) { serializeObj[this.name].push(this.value); } else { serializeObj[this.name] = [serializeObj[this.name], this.value]; } } else { serializeObj[this.name] = this.value; } }); return serializeObj; };
五、字符串截取使用……填補spa
String.prototype.strcut = function(number) { var length = this.length; var tmp = this.substr(0, number); if (this.length > number) { tmp += "…"; } return tmp; }
六、時間格式爲,xxxx 天,xxx分鐘前,日期prototype
Date.prototype.Format = function(fmt, current) { if (current) { var diff = current - this.getTime(); if (diff < 5 * 60 * 1000) { return "剛剛"; } if (diff < 60 * 60 * 1000) { return (Math.floor(diff / (60 * 1000))) + "分鐘前"; } if (diff < 24 * 60 * 60 * 1000) { return (Math.floor(diff / (60 * 60 * 1000))) + "小時前"; } if (diff < 30 * 24 * 60 * 60 * 1000) { return (Math.floor(diff / (24 * 60 * 60 * 1000))) + "天前"; } if (diff < 12 * 30 * 24 * 60 * 60 * 1000) { return (Math.floor(diff / (30 * 24 * 60 * 60 * 1000))) + "月前"; } if (diff > 12 * 30 * 24 * 60 * 60 * 1000) { return (Math.floor(diff / (12 * 30 * 24 * 60 * 60 * 1000))) + "年前"; } } var o = { "Y+": this.getFullYear(), //月份 "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; };
七、解析URLcode
function parseUrl() { var arr = location.search.split('?')[1].split('&'); var params = {}; for (var i = 0, l = arr.length; i < l; i++) { var param = arr[i].split('='); params[param[0]] = param[1]; } return params; }
八、獲取get參數orm
function getParameterByName(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); }
九、函數節流,讓頻繁事件觸發更稀疏提升性能,例如及時搜索功能。使用方法爲fn 爲事件響應函數,delay 爲間隔時間,調用 throttle(fn,delay) 返回一個新的函數給事件便可blog
function throttle(fn, delay) { var timer = null; return function() { var context = this, args = arguments; clearTimeout(timer); timer = setTimeout(function() { fn.apply(context, args); }, delay); }; }
十、防止表單屢次提交,和9中同樣,返回一個新的函數
/** * 防止屢次點擊函數 * * fn 完成時調用回調 * function fn(event,end) { * (typeof end === "function") && end(); // 操做完成 * } */function noRepeateTap(fn) { var $obj; return function(event) { $obj = $(this); if ($obj.data("loadding") === "true") { return; } $obj.data("loadding", "true").addClass('loadding'); fn.call(this, event, function end() { $obj.data("loadding", "").removeClass('loadding'); return; }); } }
第10個的使用例子
// 綁定事件 $(container).on('click', '.btn-cancel', noRepeateTap(cancel)); // 事件響應函數 function cancel(event, end) { event.preventDefault(); // 模擬異步請求 setTimeout(function(){ end(); // 須要手動調用注入的完成函數,通知完成,函數自動添加loadding class 類,用於調整樣式,完成後自動移除 },5000) }