首页
留言
关于
友链
更多
足迹
实验室
地图组件
Search
1
SpringMVC+Spring+MyBatis整合完整版Web实例(附数据)
2,628 阅读
2
关于在Flutter实现Google地图的方法
1,042 阅读
3
SqlServer分组排序后取第一条记录
709 阅读
4
Maven仓库报错:Could not transfer artifact org.springframework.boot:spring-boot-maven-plugin:pom···
623 阅读
5
druid报异常 “sql injection violation, part alway true condition not allow”的解决方案
531 阅读
发现
技术
生活
户外
登录
Search
标签搜索
Git
JavaScript
Oracle
Git学习
Java
Flutter
MySQL
SQL Server
Spring Boot
对称加密算法
IntelliJ IDEA
Google地图
Maven
ES6
秦岭户外
Flutter 2.0
linux
Tomcat
Redis
Spring
Bai Keyang
累计撰写
269
篇文章
累计收到
275
条评论
首页
栏目
发现
技术
生活
户外
页面
留言
关于
友链
足迹
搜索到
11
篇与
JavaScript
的结果
2018-05-21
对Javascript中Date对象的扩展
对Javascript中Date日期的扩展,主要是对Date对象扩展了一个格式化日期和解析日期的方法。/** * 日期解析器 * @param value * @param format * @return {Date} */ Date.prototype.parser = function(value,format) { var shortMonthsToNumber = []; shortMonthsToNumber["Jan"] = "01"; shortMonthsToNumber["Feb"] = "02"; shortMonthsToNumber["Mar"] = "03"; shortMonthsToNumber["Apr"] = "04"; shortMonthsToNumber["May"] = "05"; shortMonthsToNumber["Jun"] = "06"; shortMonthsToNumber["Jul"] = "07"; shortMonthsToNumber["Aug"] = "08"; shortMonthsToNumber["Sep"] = "09"; shortMonthsToNumber["Oct"] = "10"; shortMonthsToNumber["Nov"] = "11"; shortMonthsToNumber["Dec"] = "12"; var parseMonth = function (value) { return shortMonthsToNumber[value] || value; }; var padding = function(value, length) { var paddingCount = length - String(value).length; for(var i = 0 ; i < paddingCount ; i++) { value = "0" + value; } return value; }; var parseTime = function (value) { var retValue = value; var millis = ""; if (retValue.indexOf(".") !== -1) { var delimited = retValue.split('.'); retValue = delimited[0]; millis = delimited[1]; } var values3 = retValue.split(":"); if (values3.length > 0) { var hour = 0,minute = 0,second = 0,millis = 0; var hour = values3[0]; if(values3[1]){ minute = values3[1]; } if(values3[2]){ second = values3[2]; } return { time: retValue, hour: hour, minute: minute, second: second, millis: millis }; } else { return { time: "", hour: "", minute: "", second: "", millis: "" }; } }; var resultDate = new Date(1970, 01, 01, 00, 00, 00); if(!value){ return resultDate; } try { var date = null; var year = null; var month = null; var dayOfMonth = null; var time = null; if (typeof value == "number"){ return this.date(new Date(value), format); } else if (typeof value.getFullYear == "function") { year = value.getFullYear(); month = value.getMonth() + 1; dayOfMonth = value.getDate(); time = parseTime(value.toTimeString()); } else if (value.search(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d{0,3}[Z\-+]?(\d{2}:?\d{2})?/) != -1) { /* 2009-04-19T16:11:05+02:00 || 2009-04-19T16:11:05Z */ var values = value.split(/[T\+-]/); year = values[0]; month = values[1]; dayOfMonth = values[2]; time = parseTime(values[3].split(".")[0]); date = new Date(year, month - 1, dayOfMonth); } else { var values = value.split(" "); switch (values.length) { case 6: /* Wed Jan 13 10:43:41 CET 2010 */ year = values[5]; month = parseMonth(values[1]); dayOfMonth = values[2]; time = parseTime(values[3]); date = new Date(year, month - 1, dayOfMonth); break; case 2: /* 2009-12-18 10:54:50.546 */ var values2 = values[0].split("-"); year = values2[0]; month = values2[1]; dayOfMonth = values2[2]; time = parseTime(values[1]); date = new Date(year, month - 1, dayOfMonth); break; case 7: /* Tue Mar 01 2011 12:01:42 GMT-0800 (PST) */ case 9: /* Fri Apr 08 2011 00:00:00 GMT+0800 (China Standard Time) */ case 10: /* Fri Apr 08 2011 00:00:00 GMT+0200 (W. Europe Daylight Time) */ year = values[3]; month = parseMonth(values[1]); dayOfMonth = values[2]; time = parseTime(values[4]); date = new Date(year, month - 1, dayOfMonth); break; case 1: /* 2012-02-07CET00:00:00 */ var values2 = values[0].split(""); if(values2.length > 3){ year=values2[0]+values2[1]+values2[2]+values2[3]; } if(values2.length > 6){ month= values2[5]+values2[6]; } if(values2.length > 9){ dayOfMonth = values2[8]+values2[9]; } if(values2.length > 20){ time = parseTime(values2[13]+values2[14]+values2[15]+values2[16]+values2[17]+values2[18]+values2[19]+values2[20]); } if(Number(dayOfMonth) && Number(month) && Number(dayOfMonth)){ date = new Date(year, month - 1, dayOfMonth); }else { return new Date(); } break; default: return new Date(); } } var pattern = ""; if(!format){ format = "yyyy-MM-dd HH:mm:ss"; } for (var i = 0; i < format.length; i++) { var currentPattern = format.charAt(i); pattern += currentPattern; switch (pattern) { case "D": case "ddd": pattern = ""; break; case "dd"://月中的某一天。一位数的日期有一个前导零。 if (format.charAt(i + 1) == "d") { break; } resultDate.setDate(Number(padding(dayOfMonth, 2))); pattern = ""; break; case "d"://月中的某一天。一位数的日期没有前导零。 if (format.charAt(i + 1) == "d") { break; } resultDate.setDate(parseInt(dayOfMonth, 10)); pattern = ""; break; case "MMMM"://月份的完整名称,在 MonthNames 中定义。 case "MMM"://月份的缩写名称,在 AbbreviatedMonthNames 中定义。 pattern = ""; break; case "MM"://月份数字。一位数的月份有一个前导零。 if (format.charAt(i + 1) == "M") { break; } resultDate.setMonth(Number(padding(month, 2))-1, 1); pattern = ""; break; case "M"://月份数字。一位数的月份没有前导零。 if (format.charAt(i + 1) == "M") { break; } resultDate.setMonth(parseInt(month, 10)-1, 1); pattern = ""; break; case "y"://不包含纪元的年份。不具有前导零。 case "yyy": if (format.charAt(i + 1) == "y") { break; } pattern = ""; break; case "yy"://不包含纪元的年份。具有前导零。 if (format.charAt(i + 1) == "y" && format.charAt(i + 2) == "y") { break; } resultDate.setFullYear(Number('19'+String(year).slice(-2)), 1, 1); pattern = ""; break; case "yyyy"://包括纪元的四位数的年份。 resultDate.setFullYear(Number(year), 1, 1); pattern = ""; break; case "HH"://24 小时制的小时。一位数的小时数有前导零。 resultDate.setHours(Number(padding(time.hour, 2))); pattern = ""; break; case "H"://24 小时制的小时。一位数的小时数没有前导零。 if (format.charAt(i + 1) == "H") { break; } resultDate.setHours(parseInt(time.hour, 10)); pattern = ""; break; case "hh"://12 小时制的小时。一位数的小时数有前导零。 var hour = (time.hour == 0 ? 12 : time.hour < 13 ? time.hour : time.hour - 12); resultDate.setHours(Number(padding(hour, 2))); pattern = ""; break; case "h"://12 小时制的小时。一位数的小时数没有前导零。 if (format.charAt(i + 1) == "h") { break; } var hour = (time.hour == 0 ? 12 : time.hour < 13 ? time.hour : time.hour - 12); resultDate.setHours(parseInt(hour, 10)); pattern = ""; break; case "mm"://将分钟显示为带前导零的数字 resultDate.setMinutes(Number(padding(time.minute,2))); pattern = ""; break; case "m"://将分钟显示为不带前导零的数字 if (format.charAt(i + 1) == "m") { break; } resultDate.setMinutes(Number(time.minute)); pattern = ""; break; case "ss"://将秒显示为带前导零的数字 resultDate.setSeconds(Number(padding(time.second.substring(0, 2), 2))); pattern = ""; break; case "s"://将秒显示为不带前导零的数字 if (format.charAt(i + 1) == "s") { break; } resultDate.setSeconds(Number(time.second)); pattern = ""; break; default: pattern = ""; break; } } return resultDate; } catch(e) { if(window.console){ console.error(e); } return resultDate; } }
2018年05月21日
169 阅读
0 评论
0 点赞
2018-05-16
[方案]JS模拟表单方式下载文件
近期在调整代码的时候,遇到了一个小问题:在程序里面需要下载文件,最开始的采取的做法是window.open和window.location.href这两种形式请求后台下载文件的,贴上代码:前台关键代码:function downloadFile(url){ if($.browser.msie) { // IE下打开空下载页面 window.open(glo.path + url , "_blank" , "width=500,height=400") ; }else{ window.location.href = url.replace(/\|/g, "&"); } }后台关键代码:@RequestMapping("/downloadFile") public void download(HttpServletRequest request, HttpServletResponse response) { logger.info("ajax download file"); response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data");//application/octet-stream InputStream inputStream = null; OutputStream os = null; try { String path = PropertiesUtil.getValue("filedisk");//filedisk D:\upload_file\demo\ String downFile = "2018\02\10\test.pdf"; String fileNameStr = downFile.substring(downFile.lastIndexOf("\\"), downFile.lastIndexOf(".")); fileNameStr = fileNameStr.replaceAll(" ", ""); String exp = downFile.substring(downFile.lastIndexOf("."),downFile.length()); String fileName = fileNameStr.substring(1, fileNameStr.length())+exp; response.setHeader("Content-Disposition", "attachment;fileName="+ java.net.URLEncoder.encode(fileName, "UTF-8")); File file = new File(path+ downFile); if (file != null && file.exists()) { inputStream = new FileInputStream(new File(path+ downFile)); os = response.getOutputStream(); byte[] b = new byte[2048]; int length; while ((length = inputStream.read(b)) > 0) { os.write(b, 0, length); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { // 这里主要关闭。 try { if(null != os){ os.close(); } } catch (IOException e) { } try { if(null != inputStream){ inputStream.close(); } } catch (IOException e) { } } }上面这代码的最大问题就是,当下载文件不存在时就会出现页面加载失败的情况。采用window.open这种方式就会打开一个新的窗口页面出现请求失败;采用window.location.href这种形式就会在当前页面直接跳转,然后显示页面加载失败的情况。然后着手修改,模拟表单提交后台的形式,前端代码修改如下:function downloadFile(url){ var form = $("<form></form>").attr("action", url).attr("method", "post"); // 隐藏域传递参数 form.append($("<input></input>").attr("type", "hidden").attr("name", "downFileName").attr("value", 'Demo.txt')); form.appendTo('body').submit().remove(); }上面就是将前台的下载方法通过模拟表单提交的方式实现post传递数据。OK,到这里,开头的那个问题,解决,收工。
2018年05月16日
193 阅读
0 评论
0 点赞
2017-12-27
JavaScript将数组字符串转数组对象的方法
在JavaScript,如何将数组字符串转数组对象呢?可以利用强大的eval函数可以实现。如有一个数组字符串 [7,9,16,5] ,使用eval就可以将该字符串转换为数据。具体实现如下:var arrayText = "[7,9,16,5]"; console.log( arrayText );// 打印数组字符串 var array = eval( "(" + arrayText + ")" ) console.log( array );// 打印数组对象可以从控制台看出, [7,9,16,5]数组字符串已经被转换为一个数组对象,并具有了数组的特性,如果长度、方法等。
2017年12月27日
152 阅读
0 评论
0 点赞
2017-05-24
Javascript设计模式之Module(模块)模式
模块化是任何强大的应用程序架构中不可或缺的一部分,它通常能帮助我们清晰的分离和组织项目中的代码单元。在Javascript中,实现模块的方式包括:1、对象字面量表示法2、Module模式3、AMD模式4、CommonJS模式5、ECMAScript Harmony模式1、对象字面表示法:一个对象被描述为一组包含在大括号({})中,以逗号分割的键值(name/value) 对。对象名称可以是字符串或标识符,名称和值直接用冒号连接。对象中最后一个键值(name/value) 对后面不用加逗号,加逗号会导致报错。对象字面量不需要使用new运算符来进行实例化。下面是一个使用对象字面量表示法定义的例子:var myModule = { myProperty : "testValue", // 对象字面量可以包含属性和方法 myConfig : { useCaching : true, language : "en" }, // 基本方法 myMethod : function () { console.log("The name of this method is myMethod."); }, // 根据当前配置输出信息 myMethod2 : function () { console.log("Caching is:" + (this.myConfig.useCaching) ? "enabled" : "disabled"); }, // 重写当前配置 myMethod3 : function (newConfig) { if (typeof newConfig == "object") { this.myConfig = newConfig; console.log(this.myConfig.language); } }, }; myModule.myMethod(); myModule.myMethod2(); myModule.myMethod3({ language : "cn", useCaching : false });使用对象字面量有助于封装和组织代码。 2、Module(模块)模式Module模式最初被定义为一种在传统软件工程中为类提供私有和公有封装的方法。在Javascript中,Module模式用于进一步模拟类的概念,通过这种方式能够是一个单独的对象拥有公有/私有方法和变量,从而屏蔽来自全局作用域的特俗部分。降低函数名与在页面上其他脚本定义的函数冲突的可能性。Module模式使用闭包封装“私有”状态和组织,提供一种包装混合公有/私有方法和变量的方式,防止其泄露至全局作用域,与其他的开发人员的代码发生冲突。Module模式只提供一个公有的API,而其他的一切则都是维持在私有闭包里。Module模式提供了一个屏蔽处理底层事件逻辑的整洁解决方案,同时只暴露一个接口供应用程序的其他部分使用。Module模式非常类似于一个立即调用的函数表达式,它返回的是一个对象而不是一个函数。在Javascript中没有真正意义上的“私有”,它不像其他语言一样,它没有访问修饰符。从技术角度来讲,我们不能称变量为共有或私有,因此需要使用函数作用域来模拟这个概念。Module模式由于闭包的存在,声明的变量和方法只在该模式内部可用,但是它返回对象上定义的变量和方法对外部都是可以用的。下面是一个Module模式 的简单例子,包含命令空间、公有和私有变量:var myNamespace = (function () { // 私有变量 var myPrivateVar = 1; // 私有函数 var myPrivateMethod = function (text) { console.log(text); } return { // 公有变量 myPublicVar: "Hello JS", // 调用私用变量和私有方法的公有函数 myPublicMethod: function (name, age) { // 累加私有变量 myPrivateVar++; // 传入参数调用私有方法 myPrivateMethod("My name is " + name + "," + age + " years old this year"); } } })();3、Module模式引入混入Module模式允许将全局变量作为参数传递给模块的匿名函数,并按照我们所希望的为他们取个本地别名。// 全局模块 var myModule = (function (JQ, _) { function privateMethod1(){ JQ('.container').html('test'); } function privateMethod2(){ console.log(_.min([300,2,100,78,45])); } return { publicMethod: function(){ privateMethod1(); } } })(); myModule.publicMethod();4、工具包、框架的Module模式的实现关于工具包、框架的Module模式的实现,在这里就以我们常用的jQuery为例,定义library函数,声明一个新库,并在创建的新库时将init函数自动绑定到document.ready上:function library(module){ $(function(){ if(!module.init){ module.init(); } }); } var myLibrary = library(function(){ return { init: function(){ //模块实现 } }; })();总结一下Module模式的优缺点:优点:Module相比真正封装的思想,它对于很多拥有面向对象背景的开发人员来说更加整洁;它支持私有数据,在Module模式中,代码的公有(Public)部分能够接触私有部分,但是外界无法接触类的私有部分。缺点:由于我们访问公有和私有成员的方式不同,当我们想改变可见性时,实际上我们必须要修改每一个曾经使用该成员的地方;我们也无法访问那些之后在方法里添加的私有成员;无法为私有成员创建自动化单元测试,bug需要修补时会增加额外的复杂性,我们必须覆盖所有与有bug的私有方法进行交互的公有方法,开发人员也无法轻易的扩展私有方法,私有方法并不像最初显现出来的那么灵活。
2017年05月24日
213 阅读
0 评论
0 点赞
2014-07-20
JavaScript对字符串的截取
最近遇到的最多的应该就是JavaScript 方面的了。经常对页面上的一些值进行计算、拼接等操作,这些基本上我都是使用JavaScript 做的,同是也让我这个JavaScript 小白在这方面长进不少。截取字符串,详细大家都应该遇到过吧。比如,从后台返回很长的一段文字,如果全部放在页面,会将前台的样式打乱,这个时候,通常情况下会对字符串做一些处理(截取字符串)等。下来我就来介绍我常用的四种截取字符串的方法吧。如字符串:qwertyuiopfsd要求截取倒数两个字符,也就是“sd”。以下是几种实现方式:方法1:<script> string="qwertyuiopfsd" alert(string.substring(string.length-2,string.length)) </script>方法2:<script> alert("qwertyuiopfsd".match(/.*(.{2})/)[1]) </script>方法3:qwertyuiopfsd<script> alert("qwertyuiopfsd".match(/.{2}$/)) </script>方法4:<script> alert("qwertyuiopfsd".slice(-2)) </script>以上就是我较常用的四种截取字符串的方法,自己比较懒,喜欢使用第四种截取的方法。感觉使用的亲们可以收藏了哦。
2014年07月20日
236 阅读
0 评论
0 点赞
1
2