其实这里纪录的都是工作上同事编写时出现的问题及思考,因为我现在负责的模块暂时不涉及日期。
前后端数据传输问题
这一方面是我的薄弱项,以后会慢慢加强。一次任务中发现了两个问题:
- 异步加载使用了
ResponseBody将对象转为json,对象中的Date对象也随之变成了时间戳- 数据库传来的日期中,秒数后面有个
.0,在页面上十分扎眼。
第一个问题在 上一篇博客:使用JavaScript将时间戳转为日期 已经解决了一半,之所以是一半是因为如标题所示,JQuery 不能使用 innerHTML 这个问题困扰了我许久,百度之后才找到了原因并解决。
第二个问题有两种解决方式,分别是在控制器层解决或在jsp文件中解决。
1. JQuery 的 html()
替代方法就是将原本
document.getElementById("id").InnerHTML = "填充代码";
替换成
$("#id").html("填充代码");
//写到这里时忽然想起,这个以前是学过的。。
JQuery 的html()方法替代了innerHTML,并且更方便的是:如果是找到多个对象的选择器(如类选择器),html()方法默认选择第一个对象进行编辑。
相对的还有text()替代text,(表单元素中) val() 替代 value 。
2. 秒数后面多了个”.0”
打印从数据库(MySQL)返回的数据:1995-02-10 00:08:12.0,发现本来就是带.0的。谜底就解开了,并不是数据库返回的Date对象有什么特别之处,只是在设计实体类时,将日期元素设置为String类型了,于是查询数据库时返回了个带.0的字符串,String也一并接收了。
在控制器中修改
这是最省事的方式了,只要使用replace(".0",""),将这个小尾巴去掉并返回数据就好。
jsp中修改
这个方法就比较多了,可以使用new Date(${date}) 接收后使用 toLocaleString() 方法将对象中的时间取出就好(Date对象转年月日时分秒格式在上一篇也有提到)。只不过这么做会有两个麻烦的地方:
1. 新建对象只能在js代码块中完成,之后就需要上面,使用html()了。
2. toLocaleString()方法返回的字符串,年月日之间的分隔符是 / ,与数据库中取出的以 - 为分割符的格式不符
第二个问题的结局方式是,使用replace()方法对返回的字符串进行字符串替换
replace(/\//g,'-')
替换之后就能正常显示了

本文讨论了在JQuery中遇到的使用innerHTML的问题及其替代方法。当尝试更新DOM元素时,发现JQuery的html()方法无法直接替代innerHTML。文章介绍了两种解决方案:一是使用JQuery的html()方法,特别是对于类选择器的情况;二是针对秒数后多余的".0"问题,提出了在控制器中或jsp中修改的策略,通过字符串替换来修正日期格式。

467

被折叠的 条评论
为什么被折叠?



