简介:本文收集了我常用的JavaScript代码片段,欢迎提意见!
大灰狼边敲门边说:“小兔子乖乖,把门儿开开!”
小兔子听到后,连忙去开门:“来喽!”
兔妈妈对小兔子喊道:“不许开!是大灰狼!”
大灰狼在门口感叹道:“哎,骗一个女孩容易,骗一个女人难呀!”
JavaScript动态加载
//NO.1 function loadScript(url, callback){var script = document.createElement ("script")script.type = "text/javascript";if (script.readyState){ //IEscript.onreadystatechange = function(){if (this.readyState == "loaded" || this.readyState == "complete"){this.onreadystatechange = null;callback();}};} else { //Othersscript.onload = function(){callback();};}script.src = url;document.getElementsByTagName("head")[0].appendChild(script); }//NO.2 function loadScript(url, callback){var xhr = new XMLHttpRequest();xhr.open("get", url, true);xhr.onreadystatechange = function(){if (xhr.readyState == 4){if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){var script = document.createElement ("script");script.type = "text/javascript";script.text = xhr.responseText;document.body.appendChild(script);callback();}}};xhr.send(null); }
DOM加载完执行
function domLoad(fn){if(document.addEventListener){document.addEventListener("DOMContentLoaded", fn, false);}else{if(window.ActiveXObject){document.write("<script id='ie_onload' defer src='javascript:void(0)'><\/script>");document.getElementById("ie_onload").onreadystatechange = function(){if(this.readyState == "complete"){this.onreadystatechange = null;fn();}}}if(/WebKit/i.test(navigator.userAgent)){var _timer = setInterval(function(){if(/loaded|complete/.test(document.readyState)){clearInterval(_timer);fn();}}, 10);}} }
是否标准模式(IE)
function isCompatMode(){return document.compatMode == 'CSS1Compat';}
Link规则操作
//添加第一条规则 //insertRule(sheet, 'body', 'background-color:red', 0); function insertRule(sheet, selectorText, cssText, position) {if (sheet.insertRule) {sheet.insertRule(selectorText + ' { ' + cssText + ' }', position);} else if (sheet.addRule) {sheet.addRule(selectorText, cssText, position);} }//删除第一条规则 //deleteRule(sheet, 0); function deleteRule(sheet, position) {if (sheet.deleteRule) {sheet.deleteRule(position);} else if (sheet.removeRule) {sheet.removeRule(position);} }
加载样式表
function addSheet(url){var oLink = document.createElement('link'),oHead = document.getElementsByTagName('head')[0];oLink.rel = 'stylesheet';oLink.type = 'text/css';oLink.href = url;oHead.appendChild(oLink); }
获取CSS样式
function getStyle(o, attr){if(o.currentStyle){return o.currentStyle[attr];}else{return getComputedStyle(o,false)[attr];} }
getByClass
function getElementsByClassName(classname, parent, nodename) {var parent = parent || document, nodename = nodename || "*";if(parent.getElementsByClassName){return parent.getElementsByClassName(classname);}else{var l = parent.getElementsByTagName(nodename);return function () {var res = [];for (var i = 0, j = l.length; i < j; i++) {if (l[i].className){var name = " " + l[i].className + " ";if (name.indexOf(" " + classname + " ") != -1) {res.push(l[i]);}}}return res;} ();} }
hasClass
function hasClass (element, className){return element.className.match(new RegExp('(\\s|^)'+ className +'(\\s|$)')); }
addClass
function addClass(element, cName) {if (!hasClass(element, cName)) {element.className += ' ' + cName;} }
removeClass
function removeClass(element, cName) {if (hasClass(element, cName)) {element.className = element.className.replace(new RegExp('(\\s|^)' + cName + '(\\s|$)'), ' ');} }
JSONP调用
<script src="http://www.xxx.com?name=fnCall"></script> <script> function fnCall(info){// 在前台提供一个方法fnCall的方法// http://www.xxx.com?name=fnCall 在(后台/其他页面)自动获取fnCall的名字并且执行 } </script>
获取服务器时间
function getNowDate(callback){var xhr = new XMLHttpRequest();xhr.open('get', 'null.txt', true); //null.txt不存在,我们不需要xhr.onreadystatechange = function(){if(xhr.readyState == 3){ //状态3响应callback(xhr.getResponseHeader('Date')); //返回时间,那么可以利用获得的时间做倒计时程序了。 }};xhr.send(null); }
Cookie操作
function Cookie(name, value, options){if(typeof value != 'undefined'){options = options || {};if(value === null){options.expires = -1; //过期 }var expires = '';//存在时间选项if(options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)){var date;if(typeof options.expires == 'number'){date = new Date();date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));}else{date = options.expires;}expires = '; expires='+date.toUTCString();}var path = options.path ? '; path='+options.path : '';var domain = options.domain ? '; domain='+options.domain : '';var secure = options.secure ? '; secure' : '';//写入cookiedocument.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');}else{//读取cookievar cookValue = null;if(document.cookie && document.cookie != ''){var cookie = document.cookie.split(';');for(var i = 0, len = cookie.length; i < len; i++){var c = cookie[i].replace(/^\s+|\s+$/g, '');if(c.substring(0, name.length + 1) == (name + '=')){cookValue = decodeURIComponent(c.substring(name.length + 1));break;}}}return cookValue;} } //设置 Cookie("user", "Jununx"); //获取 Cookie("user"); //删除 Cookie("user", null);
base64编码解码
function b64Encode(str) {return btoa(unescape(encodeURIComponent(str))); }function b64Decode(str) {return decodeURIComponent(escape(atob(str))); }
浏览器判断
var browser = function() {var u = navigator.userAgent.toLowerCase();return { version: (u.match(/.+(?:rv|it|ra|ie|chrome|micromessenger|version)[\/: ]([\d.]+)/) || [])[1], safari: /safari/.test(u) && !/chrome/.test(u), opera: /opera/.test(u), msie: /msie|like gecko$/.test(u) && !/opera/.test(u), firefox: /firefox/.test(u) && !/(compatible|webkit)/.test(u),chrome: /chrome/.test(u) && /safari/.test(u), mobile: !!/applewebkit.*mobile.*/.test(u),ios: !!/\(i[^;]+;( u;)? cpu.+mac os x/.test(u),android: /android|linux/.test(u), // android或uciPhone: /iphone/.test(u),iPad: /ipad/.test(u),weChat: /micromessenger/.test(u) // 微信 }; };
IE版本判断
var _IE = (function(){var v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i');while (div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',all[0]);return v > 4 ? v : false ; }());
阶乘缓存
function memfactorial(n){if(!memfactorial.cache){memfactorial.cache = {"0" : 1,"1" : 1};}if(!memfactorial.cache.hasOwnProperty(n)){memfactorial.cache[n] = n * memfactorial(n - 1);}return memfactorial.cache[n]; }
获取字符串长度
// NO.1 String.prototype.sLen = function(){var b = 0, l = this.length;if(l){for(var i = 0; i < l; i++){if(this.charCodeAt(i) > 255){b += 2;}else{b ++;}}return b;}else{return 0;} };// NO.2 String.prototype.sLen = function(){var b = 0, l = this.length;if(l){for(var i = 0; i < l; i++){var c = this.charAt(i);if(escape(c).length > 4){b += 2;}else if(c != '\r'){b ++;}}return b;}else{return 0;} };// NO.3 String.prototype.sLen = function(){var b = 0, l = this.length;if(l){for(var i = 0; i < l; i++){var c = this.charAt(i);if(/^[\u0000-\u00ff]$]/.test(c)){b ++;}else if(c != '\r'){b += 2;}}return b;}else{return 0;} };// NO.4 String.prototype.sLen = function(){var s = this.replace(/[^\x00-\xff]/g, "**");return s.length; };
判断数据类型
var isType = function(obj, type){return Object.prototype.toString.call(obj) === '[object '+ type +']'; };
获取窗口位置
function sereen(){return {left : window.screenLeft || window.scrollX,top : window.screenTop || window.scrollY}; }
获取可视窗口大小
function client(){//IE6不加dtd会进入怪癖模式,client需要通过document.body获取return {width : document.documentElement.clientWidth || document.body.clientWidth,height : document.documentElement.clientHeight || document.body.clientHeight}; }
获取scrollTop
function getScrollTop(){if(typeof pageYOffset!= 'undefined'){return pageYOffset;} else {return (document.body || document.documentElement).scrollTop;} }
滚动到指定区域
el.scrollIntoView()
今天星期几
"今天是星期" + "天一二三四五六".charAt(new Date().getDay())
页面是否在iframe里
if(self==top){//not in iframe }else{//in iframe }
返回最小值~最大值之间随机数
function random(min, max) {return Math.floor(Math.random() * (max - min + 1) + min); }
数组去重
// NO.1 Array.prototype.unique = function() {for(var i=0, len = this.length; i<len; i++) {for(var j=i+1; j<len; j++) {if(this[i] === this[j])this.splice(j, 1);}}return this; }; // ["a","a","b"].unique();// NO.2 Array.prototype.unique = function (){var that = this, temp = {}, result = [];for(var i = 0, len = that.length; i < len; i++) {if(!temp[typeof (that[i])+that[i]]){result.push(that[i]);temp[typeof(that[i])+that[i]] = '1';}}return result; } // ["a","a","b"].unique();
数组快排
function quickSort(arr) {if (arr.length < 2) {return arr;}var pivotIndex = Math.floor(arr.length / 2);var pivot = arr.splice(pivotIndex, 1)[0];var left = [];var right = [];for (var i = 0, j = arr.length; i < j; i++) {if (arr[i] < pivot) {left.push(arr[i]);} else {right.push(arr[i]);}}return quickSort(left).concat([pivot], quickSort(right)); } var test = quickSort([1,9,2,8,3,7,4,6,5]);
将arguments转换成数组
var arr = Array.prototype.slice.call(arguments, 0);
数组随机排序
var arr = [1, 2, 3, 4, 5]; arr.sort(function(){return (Math.random() - 0.5); });
获取数组中最小/大值
var max = Math.max.apply(null, array); var min = Math.min.apply(null, array);
数组index
function index(t, arr){if(arr.indexOf){return arr.indexOf(t);}for(var i = arr.length ; i--; ){if(arr[i]===t){return i*1;}}return -1; }
多维数组转一维数组
function arr2ToArr(arr){return arr.toString().split(","); }
选择数组中两数之和等于某值的情况
// NO.1 var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], result = [], count = 10; for(var i = 0, len = arr.length; i < len; i ++){for(var j = i + 1; j < len; j ++){if(arr[i] + arr[j] === count){result.push([arr[i], arr[j]]);}} }// NO.2 var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], result = [], count = 10; for(var i = 0, len = Math.round(arr.length/2); i < len; i ++){if(arr.indexOf(count - arr[i]) !== -1){result.push([arr[i], count - arr[i]]);} }
数字金额转换成大写
function digit_uppercase(n) {var fraction = ['角', '分'];var digit = ['零', '壹', '贰', '叁', '肆','伍', '陆', '柒', '捌', '玖'];var unit = [['元', '万', '亿'],['', '拾', '佰', '仟']];var head = n < 0? '欠': '';n = Math.abs(n);var s = '';for (var i = 0; i < fraction.length; i++) {s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');}s = s || '整';n = Math.floor(n);for (var i = 0; i < unit[0].length && n > 0; i++) {var p = '';for (var j = 0; j < unit[1].length && n > 0; j++) {p = digit[n % 10] + unit[1][j] + p;n = Math.floor(n / 10);}s = p.replace(/(零.)*零$/, '').replace(/^$/, '零')+ unit[0][i] + s;}return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整'); }
日期格式化
Date.prototype.toString=function(format,loc){var time={};time.Year=this.getFullYear();time.TYear=(""+time.Year).substr(2);time.Month=this.getMonth()+1;time.TMonth=time.Month<10?"0"+time.Month:time.Month;time.Day=this.getDate();time.TDay=time.Day<10?"0"+time.Day:time.Day;time.Hour=this.getHours();time.THour=time.Hour<10?"0"+time.Hour:time.Hour;time.hour=time.Hour<13?time.Hour:time.Hour-12;time.Thour=time.hour<10?"0"+time.hour:time.hour;time.Minute=this.getMinutes();time.TMinute=time.Minute<10?"0"+time.Minute:time.Minute;time.Second=this.getSeconds();time.TSecond=time.Second<10?"0"+time.Second:time.Second;time.Millisecond=this.getMilliseconds();time.Week=this.getDay();var MMMArrEn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var MMMArr=["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"];var WeekArrEn=["Sun","Mon","Tue","Web","Thu","Fri","Sat"];var WeekArr=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];var oNumber=time.Millisecond/1000;if(format!=undefined && format.replace(/\s/g,"").length>0){if(loc!=undefined && loc =="en"){MMMArr=MMMArrEn.slice(0);WeekArr=WeekArrEn.slice(0);}format=format.replace(/yyyy/ig,time.Year).replace(/yyy/ig,time.Year).replace(/yy/ig,time.TYear).replace(/y/ig,time.TYear).replace(/MMM/g,MMMArr[time.Month-1]).replace(/MM/g,time.TMonth).replace(/M/g,time.Month).replace(/dd/ig,time.TDay).replace(/d/ig,time.Day).replace(/HH/g,time.THour).replace(/H/g,time.Hour).replace(/hh/g,time.Thour).replace(/h/g,time.hour).replace(/mm/g,time.TMinute).replace(/m/g,time.Minute).replace(/ss/ig,time.TSecond).replace(/s/ig,time.Second).replace(/fff/ig,time.Millisecond).replace(/ff/ig,oNumber.toFixed(2)*100).replace(/f/ig,oNumber.toFixed(1)*10).replace(/EEE/g,WeekArr[time.Week]);}else{format=time.Year+"-"+time.Month+"-"+time.Day+" "+time.Hour+":"+time.Minute+":"+time.Second;}return format; }var d=new Date(); console.log(d.toString()); //2012-7-27 9:26:52 console.log(d.toString("")); //2012-7-27 9:26:52 console.log(d.toString("yyyy-MM-dd HH:mm:ss")); //2012-07-27 09:26:52 console.log(d.toString("yyyy年MM月dd日 HH:mm:ss")); //2012年07月27日 09:26:52 console.log(d.toString("yyyy-MM-dd HH:mm:ss fff")); //2012-07-27 09:26:52 237 console.log(d.toString("yyyy年 MMM dd EEE")); //2012年 七月 27 星期五 console.log(d.toString("yyyy MMM dd EEE","en")); //2012 Jul 27 Fri
五种继承方式
//构造函数的继承的五种方式 function Animal() {this.species = "dong wu"; }// NO.1 构造函数绑定 function Cat(name, color) {Animal.apply(this, arguments);this.name = name;this.color = color; }// NO.2 prototype模式 function Cat (name, color) {this.name = name;this.color = color; } Cat.prototype = new Animal(); Cat.prototype.constructor = Cat;// NO.3 直接继承prototype function Cat(name, color) {this.name = name;this.color = color; } Cat.prototype = Animal.prototype; Cat.prototype.constructor = Cat;// NO.4 利用空对象做中介 function Cat(name, color) {this.name = name;this.color = color; }function F(){} F.prototype = Animal.prototype;Cat.prototype = new F(); Cat.prototype.constructor = Cat;// NO.5 拷贝继承 function Cat(name, color) {this.name = name;this.color = color; }function extend(Child, Parent) {var p = Parent.prototype;var c = Child.prototype;for (var i in p) {c[i] = p[i];}c.uber = p; } extend(Cat, Animal);
根据生日算年龄
function getAge(dateString) {var today = new Date();var birthDate = new Date(dateString);var age = today.getFullYear() - birthDate.getFullYear();var m = today.getMonth() - birthDate.getMonth();if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {age--;}return age; } console.log(getAge("1990,1,12"));
事件绑定
var events = (function(win){// 事件绑定function on(el, ev, fn){if(el.addEventlistener){on = function (el, ev, fn) {el.addEventlistener(ev, fn, false);};} else if(el.attachEvent){on = function(el, ev, fn){el.attachEvent('on' + ev, function(){fn.call(el); // IE This });};} else {on = function(el, ev, fn){el['on' + ev] = fn;};}on(el, ev, fn);}// 解除事件绑定function off(el, ev, fn){if(el.removeEventlistener){off = function (el, ev, fn) {el.removeEventlistener(ev, fn, false);};} else if(el.detachEvent){off = function(el, ev, fn){el.detachEvent('on' + ev, fn);};} else {off = function(el, ev){el['on' + ev] = null;};}off(el, ev, fn);}// 获取事件对象function getEvent(ev){return ev || win.event;}// 获取事件目标function getTarget(ev){return ev.target || ev.srcElement;}// 获取键值function getKeyCode(ev){if (typeof ev.charCode == 'number'){getKeyCode = function(ev){return ev.charCode;};} else {getKeyCode = function(ev){return ev.keyCode;};}getKeyCode(ev);}// 阻止默认行为function preventDefault(ev){if(ev.preventDefault){preventDefault = function(ev){ev.preventDefault();};} else {preventDefault = function(ev){ev.returnValue = false;};}preventDefault(ev);}// 阻止冒泡function stopPropagation(ev){if(ev.stopPropagation){stopPropagation = function(ev){ev.stopPropagation();};} else {stopPropagation = function(ev){ev.cancelBubble = true;};}stopPropagation(ev);}return {on: on,off: off,getEvent: getEvent,getTarget: getTarget,getKeyCode: getKeyCode,preventDefault: preventDefault,stopPropagation: stopPropagation}; }(window));
自定义事件
var EventHandlers = {events: {},fire: function(ev, arg){if(this.events[ev]){var e = this.events[ev];for(var i = 0, len = e.length; i < len; i++){e[i](arg);}}},on: function(ev, fn){if(!this.events[ev]){this.events[ev] = [];}this.events[ev].push(fn);},off: function(ev, fn){if(this.events[ev]){var e = this.events[ev];for(var i = 0, len = e.length; i < len; i++){if(e[i] == fn){e.splice(i, 1);break;}}}} };
加载获取图片尺寸
var img = new Image(); img.onload = function() {console.log(this.width + 'x' + this.height); }
Object.create
var create = Object.create || function(o){var F = function(o){};F.prototype = o;return new F; };
Object.prototype.bind
var bind = Object.prototype.bind || function (scope) {var fn = this;return function () {return fn.apply(scope);}; };
设置选定文本
//选定文本 function setSelectText(text, start, num) {if (text.setSelectionRange) {text.setSelectionRange(start,num);text.focus();} else if (text.createTextRange) {var range = text.createTextRange();range.collapse(true);range.moveStart('character',start);range.moveEnd('character',num - start); //用最后的位置 - 开始的位置 = 个数 range.select();} }
获取选择文本
function getSelectedText(id){var o = document.getElementById(id);if(window.getSelection) {if(o.selectionStart != undefined && o.selectionEnd != undefined){return o.value.substring(o.selectionStart, o.selectionEnd);}}else{return document.selection.createRange().text;} }
在光标位置插入字符串
// 光标位置插入字符串 function insertHtmlAtCursor(id, text){var o = document.getElementById(id);if (document.selection){o.focus();document.selection.createRange().text = text;o.focus();}else if (o.selectionStart) {var start = o.selectionStart, end = o.selectionEnd;o.value = o.value.substring(0, start) + text + o.value.substring(end, o.value.length);} }
在url中查找指定参数的值
function getQuery(){var s = (location.search.length > 0 ? location.search.substring(1) : ''),res = {},items = s.length ? s.split('&') : [],item = null, name = null, value = null,i, len = items.length;for (i = 0; i < len; i++){item = items[i].split('=');name = decodeURIComponent(item[0]);value = decodeURIComponent(item[1]);if(name.length){res[name] = value;}}return res; }
IE6里a:hover图片缓存
document.execCommand("BackgroundImageCache",false,true);
反转文本顺序
String.prototype.reverse = function (){if(this.length < 2){return this;}var str = this.split(''), result = '', len = this.length - 1;while(len >= 0){result += this[len];len --;}return result; }'反转文本顺序'.reverse();
清除空格
String.prototype.trim = String.trim || function() {return this.replace(/^\s*(.*?)\s+$/, "$1") };
加入收藏
function addFavorite(url, title) {try {window.external.addFavorite(url, title);} catch(e) {try {window.sidebar.addPanel(title, url, "");} catch(e) {alert("加入收藏失败,请使用Ctrl+D进行添加");}} }
设为首页
function setHomepage(url) {if (document.all) {document.body.style.behavior = 'url(#default#homepage)';document.body.setHomePage(url)} 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', url)} }
insertAfter
function insertAfter(newChild,refChild){var parElem=refChild.parentNode;if(parElem.lastChild==refChild){refChild.appendChild(newChild);}else{parElem.insertBefore(newChild,refChild.nextSibling);} }
innerText操作
//获取innertext function getInnerText(element) {if (typeof element.textContent == 'string') {return element.textContent;} else {return element.innerText;} } //设置innertext function setInnerText(element, text) {if (typeof element.textContent == 'string') {element.textContent = text;} else {element.innerText = text;} }
获取offsetTop
//获取offsetTop function offsetTop(element) {var top = element.offsetTop; //第一层的距离var parent = element.offsetParent;while (parent !== null) {top += parent.offsetTop;parent = parent.offsetParent;}return top; }
构建字符串的最优方法
var arr = ['item 1', 'item 2', 'item 3', ...]; var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';
获取字符串中出现次数最多的字符
// NO.1 String.prototype.strCount = function (){var num = 0, val = '', result = null, temp = '', that = this;while (that) {temp = that;val = that.substr(0, 1);that = that.replace(new RegExp(val, "g"), "");if (temp.length - that.length > num) {num = temp.length - that.length;result = {val:val, num: num};}}return result; };// NO.2 String.prototype.strCount = function (){var obj = {}, num = 0, val = '';for(var i = 0, len = this.length; i < len; i+=1){if(!obj[this[i]]){obj[this[i]] = [];}obj[this[i]].push(this[i]);}for(var arr in obj){if(num < obj[arr].length){num = obj[arr].length;val = obj[arr][0];}}return {val:val, num: num}; };// NO.3 function strCount(str){var o = {}, ret = {name: '', num: 0};for(var i = 0, len = str.length; i < len; i++){if( o[str[i]] ) {o[str[i]]++;}else{o[str[i]] = 1;}if(ret.num < o[str[i]]){ret.name = str[i];ret.num = o[str[i]];}}return ret;}// NO.4 function strCount(str){var ret = {name: '', num: 0};str.split('').sort().join('').replace(/(\w)\1+/g, function($0, $1){if ( ret.num < $0.length ) {ret.num = $0.length;ret.name = $1;}});return ret; }
对象深度clone
var cloneObj = function(obj){var newobj, s;if(typeof obj !== 'object'){return;}newobj = obj.constructor === Object ? {} : [];if(window.JSON){s = JSON.stringify(obj), //系列化对象newobj = JSON.parse(s); //反系列化(还原)}else{if(newobj.constructor === Array){newobj.concat(obj);}else{for(var i in obj){newobj[i] = obj[i];}}}return newobj; };
千分位表示
// NO.1 function millesimal(v){var num = v.length%3, prev = '', next = v.substring(num), arr = [];if(num !== 0){prev = v.substring(0, num);arr.push(prev);}for(var i = 0, len = next.length; i < len; i += 3){arr.push(next.substr(i,3))}return arr.join(); }// NO.2 function millesimal(v){return v.toString().replace(/(?=(?!\b)(\d{3})+$)/g, ','); }// NO.3 function millesimal(v){return v.toString().replace(/\B(?=(\d{3})+$)/g, ','); }
替换全部
String.prototype.replaceAll = function(s1, s2) {return this.replace(new RegExp(s1, "gm"), s2) }
HTML转义
// 转义html标签 function HtmlEncode(text) {return text.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>') } // 还原html标签 function HtmlDecode(text) {return text.replace(/&/g, '&').replace(/"/g, '\"').replace(/</g, '<').replace(/>/g, '>') }
随机字符串(字母&数字)
function randomStringNum(len) {var ret = "";for( ; ret.length < len; ret += Math.random().toString(36).substr(2));return ret.substr(0, len); }
随机颜色
// (0xffffff+1) 表示颜色最大值(0x000000 ~ 0xffffff+1) // <<0 表示左移一位,将颜色16进制的颜色值转成整型 // toString(16) 表示再将整型的颜色值转成16进制 // slice(-6) 表示生成的16进制值少于6位时,首尾依次补0 var getRandomColor = function(){return '#'+('00000'+(Math.random()*(0xffffff+1)<<0).toString(16)).slice(-6); };
curry
function currying(fn) {var args = [].slice.call(arguments, 1);return function() {var newArgs = args.concat([].slice.call(arguments));return fn.apply(null, newArgs);} }// use var test = currying(function() {console.log(arguments); }, 'a');test(1);
uncurrying
Function.prototype.uncurrying = function(){var self = this;return function(){return Function.prototype.call.apply(self, arguments);} };
函数节流
// 函数节流 var throttle = function(fn, interval){var self = fn,timer,firstTime = true;return function(){var args = arguments,that = this;if(firstTime){self.apply(that, args);return firstTime = false;}if(timer){return false;}timer = setTimeout(function(){clearTimeout(timer);timer = null;self.apply(that, args);}, interval || 500);}; };
分时调用
/*** [timeChunk 分时调用]* @param {[type]} arr [数据]* @param {Function} fn [处理函数]* @param {[type]} count [执行次数]*/ var timeChunk = function(arr, fn, count){var obj, t, len = arr.length;var start = function(){for (var i = 0, obj; i < Math.min(count || 1, arr.length); i++){obj = arr.shift();fn(obj);}};return function(){t = setInterval(function(){if (arr.length === 0){return clearInterval(t);}start();}, 200);}; };
单例模式抽象
// 单例模式抽象 var getSingle = function(fn){var res;return function(){return res || (res = fn.apply(this, arguments)); } };