丰富自己的javascript类库

2024-05-15 14:58
文章标签 java script 类库 丰富

本文主要是介绍丰富自己的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类库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992141

相关文章

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ