javascript拼接html代码
转自开源中国社区:http://www.oschina.net/code/snippet_94055_21640
经常做jsp开发的朋友可能遇到一个情况,显示列表数据不是table,而是div或者其他很多标签做的一种更漂亮的样式列表。如果采用ajax更新列表数据,可能有些朋友采用“html代码拼接”的方式,比如:"<a>"+json.name+"</a>"这样的方法。
下面我提供一个思路,可以不需要拼接html代码,并且适用任何复杂的列表。
代码说明:
1. 适用于ajax获取数据然后需要通过拼接html代码的方式实现数据列表展现的需求/功能
2. html模板最好有一个父元素, 因为最后clone的模板都是插入在父元素内部后面
3. 代码中最关键的部分当然是js的实现. 理解js部分主要是clone、each、append、replace这几个方法的理解和应用
// 希望对大家有用
[1].[代码] html代码示例 跳至 [1] [2]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<div class="modal-body" style="height: 300px; overflow: auto"> <ul class="thumbnails" > <!-- 注意id='template' 这里定义一个数据模板. id为template 然后里面需要显示值的地方用#key#的形式占位, 可以出现多次. key与json返回的对象的name保持一致. 刚开始编写模板的时候, 可以不设置 display: none; 方便查看模板样式. 测试的时候, 设置目标 display: none; --> <li class="span1" id='template' style='display: none;'> <a href="javascript:;" class="thumbnail"> <label for="#id#"> <img src="${pageContext.request.contextPath }/resource/image/#logo#" alt=""> </label> </a> <p style="text-align: center"><input id="#id#" type="checkbox" value="#id#" style="opacity: 1;">#name#</p> </li> <!-- 数据为空的时候显示的提醒信息. 不是必须. 需要的朋友主要是了解下javascript部分关键代码实现思路就可以了, 了解后随便怎么写都OK... --> <li class="span1" id='template_nodata' style='display: none;'> 吖! 人呢? (没有可供选择的用户) </li> </ul></div> |
[2].[代码] js实现模板复制和数据填充 跳至 [1] [2]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
function demo() { $.post('${pageContext.request.contextPath}/demo/getData.htm', function(data) { if(data.list.length > 0) { var hasHandler = typeof(valHandler) == 'function'; // 是否有定义val额外处理的函数 var template = $('#template'); // 循环json格式对象 $.each(data.list, function(i, obj) { // 克隆当前数据模板, 清除id, 设置显示 // jQuery也有removeAttr()方法可以清除id, 看个人习惯 // 之所以清除id, 是为了保持id的唯一性, 并且模板id不能重复 // clone(true)是把事件一起clone var temp = template.clone(true).attr('id', '').show(); var html = temp.html(), regx; // 取模板里的html字符串; 定义正则变量 // obj为json中的对象; key对应json对象的属性, val就是json的val值 $.each(obj, function(key, val) { if(hasHandler) { // 对'指定属性'的value进行特殊处理, 如value为空需指定默认值 val = valHandler(key, val); } // 动态创建正则 // 例如:#name#/g 替换所有 #name# regx = new RegExp('#'+key+'#', 'g'); html = html.replace(regx, val || ''); // 将占位符替换成实际值, 如果 val为null, 将原有的#name#占位符替换成'' }); // temp.html(html)是把html字符有替换回去 // 然后追加到目标的父容器的后面 template.parent().append(temp.html(html)); }); // $.each } else { $('#template_nodata').show(); } }); // ajax获取数据}// valHandler必须定义, // 如果不定义, 上述代码var hasHandler = typeof(valHandler) == 'function';部分会报错为定义对象// 该函数的意义是针对需要二次处理的字段进行处理function valHandler(key, val) { if(key == 'logo' && !val) { // 如果logo为空, 路径改成默认logo路径 val = 'defaultLogo.png'; } return val;} |
javascript拼接html代码的更多相关文章
- JavaScript拼接html字符串时截断问题
在项目中碰到一个问题,就是JavaScript拼接html标签时,里面特殊字符会有些问题,比如单引号截断配对,导致后面的内容不显示或显示错误.在此记录一下. 下面贴一段简化的代码,若有描述不清的地方还 ...
- Javascript 语言精粹 代码片段合集
Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...
- WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信
原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...
- Notepad++ 配置 支持jquery、html、css、javascript、php代码提示
原文:Notepad++ 配置 支持jquery.html.css.javascript.php代码提示 官网下载:http://notepad-plus-plus.org/ 获取插件的方法:打开软件 ...
- ASP.NET 前台Javascript调用后台代码 / 后台调用前台Javascript
1:ASP.NET 前台Javascript调用后台代码 1.1:前台Javascript <script> function CallCs() { var str = "< ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 浅谈javascript引擎执行代码的步骤-(2019-2)
平时面试经常会遇到类似下面的这种题,而且千变万化,让人一个头两个.示例这道题算是稍微有点难度的了,这种题考查的是JavaScript引擎执行代码的步骤. b = 'cba'; function a(a ...
- electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...
- JavaScript中的代码执行顺序
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head&g ...
随机推荐
- Vue基础知识总结(一)
一.基本语法: 1.实例化:new Vue({}) 2.el:一定是根容器元素(vue的作用域就是这个根元素内),就是写选择器 data:用于存储数据 methods:定义方法(方法里th ...
- 蓝点通用管理系统V13版发布了!
蓝点通用管理系统13版已发布! 重磅新功能:系统的通知和提醒功能,增加微信方式,微信通知.微信查询数据.微信拍照上传....... 蓝点的客户管理系统.进销存管理系统.产品管理系统.工作流管理系统.投 ...
- angular directive 深入理解
由于业务的需要,最近angular 的diretive 研究的比较多,有和同事一起共同协作开发scada的项目, 对directive 有了进一步更深的理解. 感觉才开始真正理解了这句话的意思: In ...
- MyISAM的key_buffer_size和InnoDB的innodb_buffer_pool_size
一.MyISAM的key_buffer_size MyISAM的索引方式是非聚集索引,主索引和其他索引没有本质区别,在data域都是存储了具体记录行的地址.key_buffer_size规定了系统将多 ...
- Unity3D研究院之IOS本地消息通知LocalNotification的使用(六十七)
http://www.xuanyusong.com/archives/2632 现在的游戏里一般都会有本地消息,比如每天定时12点或者下午6点告诉玩家进入游戏领取体力.这种东西没必要服务器去推送 ...
- 设计模式学习笔记--备忘录(Mamento)模式
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...
- POI动态生成word2007加强版
先看效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjAzODkxNzU=/font/5a6L5L2T/fontsize/400/fill ...
- BASE64Decoder的引用
project---->properties--->Libraries--->JRE System Library--->Access rules--->Edit---& ...
- 华为AR路由器AR207-S配置pppoe拨号上网图解实例
- CSDN开源夏令营 百度数据可视化实践 ECharts(4)
ECharts知识点总结: 在应用过程中总会遇到一些难以理解的概念和属性,这里就总结了一下比較难的知识点,方便理解概念.进而更好的掌握ECharts. (1)1. 一个完整的option包括什么?能 ...