本文主要是介绍丰富自己的javascript类库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
丰富自己的javascript类库
每个优秀的开发者都会形成自己的类库,作为一个java开发者,我们也会写一大堆的工具类,用于简化我们的开发工作。但是作为一个全站攻城狮,不仅仅只是懂的形成java的类库,javascript的类库也同样重要。好啦,这篇文章不多说废话,下面对的代码提供了一些非常方便的工具类,或者是对javascript已有对象的扩展,比如字符串的扩展,日期对象的扩展,数组的扩展等。同样的,也提供了一个StringBuffer对象,该对象的用法基本也与java.lang.StringBuffer一样...
/*** 该文件包含了一些模拟java常用类的相关javascript类* 这里面主要包含了java.lang,java.util包中一些常用的类* * 为了更加容易操作字符串,这里面也对字符串进行了赠强* 对数组,日期也进行了增强* * 比如:StringBuffer,List,Map,Set等* @author:luohong* @date:2015-10-21 13:40 pm* @email 846705189@qq.com*/
//========================================实现一个StringBuffer====================================//
/*** 模拟StringBuffer* 使用过程基本上和java.lang.StringBuffer一样,但是在toString中可以插入风格符,默认分隔符为','* */
function StringBuffer(){this.strs = []; //用数组来缓存所有的内容if(typeof StringBuffer._initialized == "undefined"){StringBuffer._initalized = true; //已经初始化过了,不需要重复初始化StringBuffer.prototype.append = function(str){this.strs.push(str);return this;};StringBuffer.prototype.toString = function(seperator){if(!seperator){seperator = "";}return this.strs.join(seperator);};}
}
//========================================实现一个StringBuffer====================================////====================================增强字符串=============================================//
/*** 判断字符串是否为空。* * @returns {Boolean}*/
String.prototype.isEmpty = function() {return (this == null || this == undefined || this == '');
};/*** 功能:移除首尾空格*/
String.prototype.trim = function() {return this.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, '');
};/*** 功能:移除左边空格*/
String.prototype.lTrim = function() {return this.replace(/(^\s*)/g, "");
};/*** 功能:移除右边空格*/
String.prototype.rTrim = function() {return this.replace(/(\s*$)/g, "");
};/*** 判断结束是否相等* * @param str* @param isCasesensitive* @returns {Boolean}*/
String.prototype.endWith = function(str, isCasesensitive) {if (str == null || str == "" || this.length == 0|| str.length > this.length)return false;var tmp = this.substring(this.length - str.length);if (isCasesensitive == undefined || isCasesensitive) {return tmp == str;} else {return tmp.toLowerCase() == str.toLowerCase();}
};/*** 判断开始是否相等* * @param str* @param isCasesensitive* @returns {Boolean}*/
String.prototype.startWith = function(str, isCasesensitive) {if (str == null || str == "" || this.length == 0|| str.length > this.length)return false;var tmp = this.substr(0, str.length);if (isCasesensitive == undefined || isCasesensitive) {return tmp == str;} else {return tmp.toLowerCase() == str.toLowerCase();}
};/*** 在字符串左边补齐指定数量的字符* * @param c* 指定的字符* @param count* 补齐的次数 使用方法: var str="999"; str=str.leftPad("0",3); str将输出 "000999"* @returns*/
String.prototype.leftPad = function(c, count) {if (!isNaN(count)) {var a = "";for ( var i = this.length; i < count; i++) {a = a.concat(c);}a = a.concat(this);return a;}return null;
};/*** 在字符串右边补齐指定数量的字符* * @param c* 指定的字符* @param count* 补齐的次数 使用方法: var str="999"; str=str.rightPad("0",3); str将输出* "999000"* @returns*/
String.prototype.rightPad = function(c, count) {if (!isNaN(count)) {var a = this;for ( var i = this.length; i < count; i++) {a = a.concat(c);}return a;}return null;
};/*** 对html字符进行编码 用法: str=str.htmlEncode();* * @returns*/
String.prototype.htmlEncode = function() {return this.replace(/&/g, "&").replace(/</g, "<").replace(/>/g,">").replace(/\"/g, """).replace(/\'/g, "'");
};/*** 对html字符串解码 用法: str=str.htmlDecode();* * @returns*/
String.prototype.htmlDecode = function() {return this.replace(/\&\;/g, '\&').replace(/\>\;/g, '\>').replace(/\<\;/g, '\<').replace(/\"\;/g, '\'').replace(/\&\#39\;/g,'\'');
};/*** 对json中的特殊字符进行转义*/
String.prototype.jsonEscape = function() {return this.replace(/\"/g, """).replace(/\n/g, "&nuot;");
};/*** 对json中的特殊字符进行转义*/
String.prototype.jsonUnescape = function() {return this.replace(/"/g, "\"").replace(/&nuot;/g, "\n");
};/*** 字符串替换* * @param s1* 需要替换的字符* @param s2* 替换的字符。* @returns*/
String.prototype.replaceAll = function(s1, s2) {return this.replace(new RegExp(s1, "gm"), s2);
};/*** 获取url参数* * @returns {object}*/
String.prototype.getArgs = function() {var args = {};if (this.indexOf("?") > -1) {var argStr = this.split("?")[1], argAry = argStr.split("&");for ( var i = 0, c; c = argAry[i++];) {var pos = c.indexOf("=");if (pos == -1)continue;var argName = c.substring(0, pos), argVal = c.substring(pos + 1);argVal = decodeURIComponent(argVal);args[argName] = argVal;}}return args;
};/*** var str=String.format("姓名:{0},性别:{1}","ray","男"); alert(str);* * @returns*/
String.prototype.format = function() {var template = arguments[0];var args = arguments;var str = template.replace(/\{(\d+)\}/g, function(m, i) {var k = parseInt(i) + 1;return args[k];});return str;
};
//====================================增强字符串=============================================////====================================增强数组==============================================//
/*** 移除数组中指定对象*/
Array.prototype.remove = function(val) {for ( var i = 0; i < this.length; i++) {if (this[i] === val) {this.splice(i, 1);i--;}}return this;
};//插入元素
Array.prototype.insert = function(index, item) {this.splice(index, 0, item);return this;
};/*** 去除数组中的重复项* * @function [method]* 判断对象是否相同的方法(可选参数,默认实现是深度匹配两个对象是否相同),示例:function(x,y){if(x.id===y.id)return* true;}*/
Array.prototype.unique = function(method) {if (!angular.isArray(this))return this;var sameObj = method || function(a, b) {var tag = true;for ( var x in a) {if (!b[x])return false;if (typeof (a[x]) === 'object') {tag = sameObj(a[x], b[x]);} else {if (a[x] !== b[x])return false;}}return tag;}var flag, that = this.slice(0);this.length = 0;for ( var i = 0; i < that.length; i++) {var x = that[i];flag = true;for ( var j = 0; j < this.length; j++) {y = this[j];if (sameObj(x, y)) {flag = false;break;}}if (flag)this[this.length] = x;}return this;
}
//====================================增强数组==============================================////=====================================增强date,获取xxxx-MM-yy hh:mm:ss格式日期==========================================//
/*** 返回当前时间,格式如下:2016-06-06 12:12:12*/
Date.prototype.current = function(){var year = this.getFullYear();var month = (this.getMonth() + 1) < 10 ? (0 + "" + (this.getMonth() + 1)) : (this.getDate() + 1);var date = this.getDate() < 10 ? (0 + "" + this.getDate()) : this.getDate();var hours = this.getHours() < 10 ? (0 + "" + this.getHours()) : this.getHours();var minutes = this.getMinutes() < 10 ? (0 + "" + this.getMinutes()) : this.getMinutes();var seconds = this.getSeconds() < 10 ? (0 + "" + this.getSeconds()) : this.getSeconds();return year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds;
};/*** 返回当前日期,格式如下:2016-06-06*/
Date.prototype.currentDate = function(){var year = this.getFullYear();var month = this.getMonth() + 1;if(month < 10){month = "0" + month;}var date = this.getDate() < 10 ? (0 + "" + this.getDate()) : this.getDate();return year + "-" + month + "-" + date;
};
//=====================================增强date,获取xxxx-MM-yy hh:mm:ss格式日期==========================================//
上面的代码,提供了一些在java中常用的方法,是的javascript的开发与java的开发非常的相似,嘿嘿,javascript一样可以写的跟java一样的6。比如
var sb = new StringBuffer();
sb.append('hello').append(new Date().getTime()).append();var date = new Date();
date.current();
date.currentDate();var str = "";
str.isEmpty(); //true
str.startWith('aaaa'); // falsevar array = [1,2,2,3]; //[1,2,3]
array.<span style="font-family: Arial, Helvetica, sans-serif;">unique</span>();
当然,上面的代码,我们是直接通过原型对象扩展了javascript基础对象,下面提供一个日期工具类,用于操作日期的相关操作:比较时间,获取当前月份的第一天和最后一天,格式化日期等
/*** date工具类* 目前只有格式化的功能* * @author 沈少钦* @date 2016-04-20 11:19*/
var DateUtils = {/**** @param {[Date]} date [日期对象] , if no, then use new Date(). that is current computer date* @param {[Date]} pattern [格式规则], if no, then use DateUtils.DEFAULT_DATE_TIME_PATTERN* @return {[string]} [格式化的日期字符串]*/format: function(date /*optional*/ , pattern /*optional*/ ) {function deal(date, format) {var map = {"M": date.getMonth() + 1, //月份 "d": date.getDate(), //日 "H": date.getHours(), //小时 "m": date.getMinutes(), //分 "s": date.getSeconds(), //秒 "q": Math.floor((date.getMonth() + 3) / 3), //季度 "S": date.getMilliseconds() //毫秒 };format = format.replace(/([yMdHmsqS])+/g, function(all, t) {var v = map[t];if (v !== undefined) {if (all.length > 1) {v = '0' + v;v = v.substr(v.length - 2);}return v;} else if (t === 'y') {return (date.getFullYear() + '').substr(4 - all.length);}return all;});return format;}switch (arguments.length) {case 0:return deal(new Date(), DateUtils._CONS_.DEFAULT_DATE_TIME_PATTERN);case 1:if (arguments[0] instanceof Date) {return deal(arguments[0], DateUtils._CONS_.DEFAULT_DATE_TIME_PATTERN);} else {return deal(DateUtils._CONS_.DEFAULT_DATE_TIME_PATTERN, arguments[0]);}case 2:return deal(arguments[0], arguments[1]);} },getChineseWeeks: function(date) {if (date === null || date === undefined) {date = new Date();}var value = date.getDay()-1;var result = '星期';switch (value) {case 0:result += "一";break;case 1:result += "二";break;case 2:result += "三";break;case 3:result += "四";break;case 4:result += "五";break;case 5:result += "六";break;case 6:result += "日";break;}return result;},getEnglishWeeks: function(date) {if (date === null || date === undefined) {date = new Date();}var value = date.getDay()-1;switch (value) {case 0:return "Monday";case 1:return "Tuesday";case 2:return "Wensday";case 3:return "Thursday";case 4:return "Friday";case 5:return "Saturday";case 6:return "Sunday";}},/*** 计算时间差* @param startTime 开始时间* @param endTime 结束时间* @param diffType 时间差类型,second,minute,hour,day* @return 返回时间差,整数类型** 使用例子:* var result = DateUtils.getDateDiff("2010-02-26 16:00:00", "2011-07-02 21:48:40", "second");* var result = DateUtils.getDateDiff("2010-02-26 16:00:00", "2011-07-02 21:48:40", "minute");* var result = DateUtils.getDateDiff("2010-02-26 16:00:00", "2011-07-02 21:48:40", "hour");* var result = DateUtils.getDateDiff("2010-02-26 16:00:00", "2011-07-02 21:48:40", "day");*/getDateDiff: function(startTime, endTime, diffType) {//将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 startTime = startTime.replace(/\-/g, "/");endTime = endTime.replace(/\-/g, "/");//将计算间隔类性字符转换为小写diffType = diffType.toLowerCase();var sTime = new Date(startTime); //开始时间var eTime = new Date(endTime); //结束时间var divNum = 1;switch (diffType) {case "second":divNum = 1000;break;case "minute":divNum = 1000 * 60;break;case "hour":divNum = 1000 * 3600;break;case "day":divNum = 1000 * 3600 * 24;break;default:break;}return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(divNum));},/*** 将秒格式化为: x小时z分钟y秒* @param {int} seconds 秒*/toChineseTime: function(seconds){var hour = "";var minute = parseInt(seconds / 60);seconds = parseInt(seconds % 60);if(minute >= 60){hour = parseInt(minute / 60);minute = parseInt(minute % 60);}var result = seconds + "秒";if(minute){result = minute + "分" + result;} if(hour){result = hour + "小时" + result;}return result;},/*** 获取当前日期的前几天日期* @param n 间隔天数* @param startDate 起始日期,默认为当天* 使用例子:DateUtils.getBeforeDate(5), DateUtils.getBeforeDate(5, '2016-05-06')* 返回格式如:yyyy-mm-dd*/getBeforeDate: function(n, startDate){var n = n;var d = null;if(!startDate){d = new Date();}else{var strs = startDate.split('-');d = new Date();d.setYear(strs[0]);d.setMonth(strs[1] - 1);d.setDate(strs[2]);}var year = d.getFullYear();var mon=d.getMonth()+1;var day=d.getDate();d.setTime(d.getTime() - n * 1000 * 60 * 60 * 24);year = d.getFullYear();mon = d.getMonth() + 1;day = d.getDate();s = year+"-"+(mon<10?('0'+mon):mon)+"-"+(day<10?('0'+day):day);return s;},/*** 获取当前日期的后几天日期* @param n 间隔天数* @param startDate 起始日期,默认为当天* 使用例子:DateUtils.getAfterDate(5), DateUtils.getAfterDate(5, '2016-05-06')* 返回格式如:yyyy-mm-dd*/getAfterDate: function(n, startDate){var n = n;var d = null;if(!startDate){d = new Date();}else{var strs = startDate.split('-');d = new Date();d.setYear(strs[0]);d.setMonth(strs[1] - 1);d.setDate(strs[2]);}d.setTime(d.getTime() + n * 1000 * 60 * 60 * 24); //更新时间year = d.getFullYear();mon = d.getMonth() + 1;day = d.getDate();s = year+"-"+(mon<10?('0'+mon):mon)+"-"+(day<10?('0'+day):day);return s;},/*** 获取当前月第一天* @returns {Date}*/getCurrentMonthFirst: function(){var date=new Date();date.setDate(1);return date;},/*** 获取当前月最后一天* @returns {Date}*/getCurrentMonthLast: function(){var date=new Date();var currentMonth=date.getMonth();var nextMonth=++currentMonth;var nextMonthFirstDay=new Date(date.getFullYear(),nextMonth,1);var oneDay=1000*60*60*24;return new Date(nextMonthFirstDay-oneDay);}
}DateUtils._CONS_ = {DEFAULT_DATE_PATTERN: "yyyy-MM-dd", //默认的 年月日模式DEFAULT_DATE_TIME_PATTERN: "yyyy-MM-dd HH:mm:ss", //默认的 完全模式DEFAULT_TIME_PATTERN: "HH:mm:ss", //默认的 时分秒模式DEFAULT_MON_DAY_HOU_MIN_PATTERN: "MM-dd HH:mm", //默认的 月日时分模式DEFAULT_MON_DAY_PATTERN: "MM-dd", //默认的 月日模式DEFAULT_HOU_MIN_PATTERN: "HH:mm" //默认的 时分模式
};
总结
有了上面的例子,我们就可以将javascript一些常用的组件封装起来,形成我们自己的开发类库,以后开发新的项目,直接将这些js类库搬移过去,可以极大的简化我们寻找代码的时间,不必要依赖过多的google,然后copy的过程。
这篇关于丰富自己的javascript类库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!