阅读更多

6顶
4踩

Web前端
json2html是一个基于JavaScript的HTML模板库,顾名思义,该库主要用于将JSON对象转换为HTML格式。


使用json2html进行JSON转换,需要先通过JSON来指定转换规则,比如使用转换对象的名称值或属性值作为DOM HTML元素的属性。以下是几个预留的属性名:

  • tag:指定DOM元素的类型(div、span等)
  • html:指定DOM元素需要包含的内容
  • children:指定DOM元素的下一级内容
示例:

var transform = {'tag':'li','html':'${name} (${age})'};

var data = [
      {'name':'Bob','age':40},
      {'name':'Frank','age':15},
      {'name':'Bill','age':65},
      {'name':'Robert','age':24}
];

document.getElementById('list').innerHTML = json2html.transform(data,transform);


结果如下:

<ul id="list">
    <li>Bob (40)</li>
    <li>Frank (15)</li>
    <li>Bill (65)</li>
    <li>Robert (24)</li>
</ul>

json2html提供了以下两种形式,以便在服务器端和客户端都能使用:

  • jQuery插件形式:扩展了jQuery的核心库,包含了jquery事件
  • node.js包形式:可用于基于node.js的web服务器
项目官网:http://json2html.com/
  • 大小: 16.2 KB
6
4
评论 共 13 条 请登录后发表评论
13 楼 skzr.org 2013-05-31 21:45
非常nice,已经有相关的技术了,可以参考下:http://angularjs.org/
或者国内的社区:http://angularjs.cn/
12 楼 elgs 2013-05-31 02:30
JSON is ruling the world now.
11 楼 JanckyWong 2013-05-30 20:16
怎么用l?js来用?
10 楼 damoqiongqiu 2013-05-30 13:23
没有类似Ext那种HTML模板机制,对于复杂的JSON对象,做起来确实比较吃力。
9 楼 cgs1999 2013-05-30 11:13
这个比较适合简单的处理,复杂的处理貌似不适合。

目前使用artTemplate来进行类似的处理
http://aui.github.io/artTemplate/

例子
-------------------------------------------------------------------
<script>
var userTmpl = template('userTmpl', {mts:data});
document.getElementById('userList').innerHTML = userTmpl;
</script>

<script id="userTmpl" type="template">
{each mts as mt i}
 <li id="mt-{mt.mtNO}"  class="clearfix mt {if !mt.online}offline{/if}" data-mtno="{mt.mtNO}" data-type="{mt.mtType}">
		<div class="border clearfix">
			   <div class="left">
					<div class="face">
					   {if mt.online}
						 <div><img src="{mt.portrait}"/></div>
					   {else}
					      <div><img class="offline" src="{mt.portrait}"/></div>
					   {/if}
					</div>
				</div>
				<div class="con">
					<div class="con_right">
								
						<div class="mcc-action">
									{if mt.online}
										<a class="del" title="删除与会方" style="display:none"></a>
									{else}
										<a class="del" title="删除与会方"></a>
									{/if}

						            {if mt.callState==-1}
									   <a class="call" title="呼叫"></a>
                                       <a class="hang-up" title="挂断" style="display:none;"></a>
									{else if mt.callState==1}
									    <a class="hang-up" title="挂断"></a>
										<a class="call" title="呼叫" style="display:none;"></a>
									{else}
                                         <a class="call" title="呼叫" style="display:none;"></a>
									     <a class="hang-up" title="挂断" style="display:none;"></a>
									{/if}

                                    {if mt.silenceView}
                                        <a class="silence" title="设置静音"></a>									 
									{else}
                                        <a class="silence" title="设置静音" style="display:none;"></a>
									{/if}
									

                                    {if mt.unsilenceView}
                                        <a class="unsilence" title="取消静音"></a>
									{else}
                                        <a class="unsilence" title="取消静音" style="display:none;"></a>
									{/if}


                                    {if mt.unmuteView}
									    <a class="unmute" title="取消哑音" ></a>
									{else}
                                        <a class="unmute" title="取消哑音" style="display:none;"></a>
									{/if}

									{if mt.muteView}
                                        <a class="mute" title="设置哑音" ></a>
									{else}
                                        <a class="mute" title="设置哑音" style="display:none;"></a>
									{/if}
						            
									{if mt.chairmanView}
                                       <a class="chairman" title="设为管理方"></a>
									{else}
                                       <a class="chairman" title="设为管理方" style="display:none;"></a>
									{/if}

									{if mt.unchairmanView}
									   <a class="unchairman" title="取消管理方"></a>
									{else}
									   <a class="unchairman" title="取消管理方" style="display:none;"></a>
									{/if}
                                  
								    {if mt.speakerView}
								       <a class="speaker" title="设置发言方"></a>
									{else}
									  <a class="speaker" title="设置发言方" style="display:none;"></a>
									{/if}
									  
									{if mt.unspeakerView}
									   <a class="unspeaker" title="取消发言方"></a> 
									 {else}
									   <a class="unspeaker" title="取消发言方" style="display:none;"></a> 
									{/if}

									 
									 
						</div>
					</div>
					<div class="con_left">
						<div class="name" data-pinyin="{mt.pinyin}">{mt.mtAlias}</div>
						<div class="status">
							  <div class="current-status">
							      {if mt.online}
									  {if mt.secVideoState}
									    <a class="two-stream"></a>
									  {else}
									     <a class="two-stream" style="display:none;"></a> 
									  {/if}

									  {if mt.speakerState}
									    <a class="speaker"></a>
									  {else}
									     <a class="speaker" style="display:none;"></a> 
									  {/if}

									  {if mt.vmpState}
									    <a class="vmp"></a>
									  {else}
									     <a class="vmp" style="display:none;"></a> 
									  {/if}

									  {if mt.discussState}
									    <a class="discuss"></a>
									  {else}
									     <a class="discuss" style="display:none;"></a> 
									  {/if}

									  {if mt.chairmanState}
									    <a class="chairman"></a>
									  {else}
									     <a class="chairman" style="display:none;"></a> 
									  {/if}

									  {if mt.silenceState}
									    <a class="silence"></a>
									  {else}
									     <a class="silence" style="display:none;"></a> 
									  {/if}

									  {if !mt.muteState}
									    <a class="unmute"></a>
									  {else}
									     <a class="unmute" style="display:none;"></a> 
									  {/if}
								   {else}	
								       <a class="two-stream" style="display:none;"></a> 
								       <a class="speaker" style="display:none;"></a>
								       <a class="vmp" style="display:none;"></a> 
								       <a class="discuss" style="display:none;"></a> 
								       <a class="chairman" style="display:none;"></a> 
								       <a class="silence" style="display:none;"></a>
                                       <a class="unmute" style="display:none;"></a> 
								   {/if}
							   </div>
							   {if mt.callState==0}
							     <div class="immediacally-status">正在呼叫中...</div>
							   {else}
							      <div class="immediacally-status" style="display:none;">正在呼叫中...</div>
							   {/if}
						</div>
					</div>
				</div>
		</div>
	</li>
   {/each}
</script>
8 楼 zzzppp123999 2013-05-30 09:56
log.debug("测试");log.debug("测试");
7 楼 liu_qchao 2013-05-30 08:39
有点像ExtJS的模板,不过功能比较弱,下一步可以考虑支持运算符、表达式和内建函数
6 楼 clxy 2013-05-30 08:15
html模板有个巨大的优势是直观,用浏览器直接打开,所见(基本上大概)即所得。
json模板也许速度会快,但没有了这个优势。特别是复杂的界面,加上循环和分歧等,貌似不大乐观。
5 楼 lihao312 2013-05-29 18:13
lysvanilla 写道
lihao312 写道
这个? 可以转化其他的? 比较不是ul是div呢?


请注意var transform = {'tag':'li','html':'${name} (${age})'};  
这是转换规则


不好意思 刚刚看到
4 楼 lysvanilla 2013-05-29 18:12
lihao312 写道
这个? 可以转化其他的? 比较不是ul是div呢?


请注意var transform = {'tag':'li','html':'${name} (${age})'};  
这是转换规则
3 楼 wangguo 2013-05-29 18:11
lihao312 写道
这个? 可以转化其他的? 比较不是ul是div呢?

可以指定
var transform = {'tag':'li','html':'${name} (${age})'}; 
2 楼 lihao312 2013-05-29 18:11
var chartData = { groups:
  [{value:100,label:'Day 1'},
   {value:50,label:'Day 2'},
   {value:150,label:'Day 3'},
   {value:40,label:'Day 4'},
   {value:50,label:'Day 5'}
]};

var transforms = {
barChart: [
    {tag:'ul',class:'barChart',children:function() {
        return($.json2html(this.groups,transforms.group));
    }}
],
group: [
    {tag:'li',class:'group',children:[
        {tag:'div',class:'bar',style:'height:${value}px;'},
        {tag:'div',class:'label',html:'${label}'}
    ]}
]
};

$('#chart').json2html(chartData, transforms.barChart);
1 楼 lihao312 2013-05-29 18:09
这个? 可以转化其他的? 比较不是ul是div呢?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 数据库课程设计——学生选课系统实验报告

    数据库课程设计——学生选课系统实验报告 1 需求分析 1 1.1 系统目标 1 1.2 系统功能需求 1 2 数据库概念设计 1 2.1 系统概念模型 1 3 将概念模型转换为关系模型 2 3.1 将E-R模型转换为关系模型 2 3.2 数据库结构设计 3 3.3 实现数据完整性 4 4 应用程序设计 4 4.1 学生选课系统处理流程图 4 4.2 总体结构和外部结构设计 4 5 编程实现 5 5.1 Login.aspx 5 5.2 Student.aspx 5 5.3 Teacher.aspx 6 5.4 guanliyuan.aspx 6 5.5 Acourse.aspx 7 5.6 Ateacher.aspx 7 5.7 Astudent.aspx 7 5.8 Password.aspx 7 总 结 9 致 谢 10 参考文献 11

  • 实验选课系统数据库设计.doc

    实验选课系统数据库设计.doc

  • 数据库设计实验报告

    在线公交查询系统,能够根据站点,线路和换乘三种情况查询公交线路。换乘查询分为时间最短和换乘最少两种。

  • 设计一个学生类(CStudent)

    设计一个学生类(CStudent),它具有的私有数据成员是注册号、姓名、数学、外语、计算机课程的成绩。具有的公有成员函数是:求三门课总成绩的函数sum,求三门课平均成绩的函数average,显示学生数据信息的函数display,设置学生数据信息的函数setData.然后通过主函数从键盘对学生对象的数组(全班学生信息)进行输入,而后求出每一个学生的总成绩、平均成绩,并显示全班学生总成绩最高的同学的全部数据信

  • 数据库实验报告--基本命令以及触发器

    大家不妨下载下来参考、学习,值得下载,下吧下吧

  • 数据库 实验七

    实验内容 问题描述:某学院有基本实体集:系、教师、学生和课程。各个实体的属性集为: 系:系编号,系名,地址 课程:课程号,课程名称,开课学期 学生:学号,学生姓名,性别,住址 教师:教工号,教师姓名,办公室 实体间的联系有:每个系有一位系主任,有多位教师;一个教师只能在一个系任职;每个系开设多门不同课程;一门课程只能由一个系负责开设;每门课程只能由一个教师授课,一个教师可以讲授多门课程...

  • 数据库设计实例 教务管理系统

    数据库实验七 数据库设计 题目要求:       设计一个教务管理系统。要求管理包括:学生的档案,学生选课的情况,学生每学期的综合测评,教师档案,教师工作量等等。具体考核方法根据自己了解的实际情况处理。       假设此次设计的教务系统是整个学生管理系统数据库中的一部分,整个系统至少还包括学籍管理等其他子系统。在初期设计时,先关注与教务系统有关的数据。在完成对教务管理系统的建

  • Oracle系统案例——学生信息管理系统

    学生信息管理系统。

  • 6管理信息系统笔记

    第六章 管理信息系统的系统设计 第一节系统设计的主要工作 第二节代码设计 第三节系统架构设计 第四节功能结构设计 第五节信息系统流程图设计 第六节系统物理配置方案设计 第七节数据存储设计 第八节输出设计 第九节输入设计 第十节处理流程图设计 第十一节制定设计规范和编写设计报告 项目实战 (1)对进销存管理系统的功能模块进行设计。 (2)对进销存管理系统的输入和输出进行设计。 (3) 创建进销存管理系统的数据库jxcdata.accdb;在该数据库中创建以下数据表:部门、员工、仓库、供应商、客户、商品信息、商

  • MySQL练习——教学系统数据库设计

    目录 1. 教学系统概述 2. 数据库结构设计 3. 教学系统测试 1. 教学系统概述 根据大学生教学系统的原型设计出如下的ER关系图,主要来练习数据库系统的搭建: 上图一共包含五个实体,分别是学生,教师,课程,院系,行政班级: 其中学生和课程的关系是多对多,即一个学生可以选择多门课程,而一个课程又有多个学生选择。每个学生的每门课程都有一个成绩,所以选课表中应该有成绩字段。 课程和教师是多对一关系,即一个教师只教一门课程,而一个课程又由多位老师教授。 教师和院系是一对多的关..

  • 数据库课程设计实验报告.docx

    数据库课程设计实验报告.docx

  • 数据库系统设计综合实验

    C#-可视化-数据库系统设计综合实验

  • 数据库实验六 触发器实验

    一. 实验目的 1. 理解触发器的作用和工作机制; 2. 掌握某一具体DBMS的SQL编程语言,在前面创建的数据库基础上,定义BEFORE触发器和AFTER触发器,并验证设计的触发器是否起作用。 二. 实验内容 1. 触发器的设计; 2. 触发器正确性验证。 三. 实验要求、过程及结果 设计一个触发器,实现如下功能:在Student中, 当删除某一同学S#时,该同学的所有选课也都要删除; 完成触发器的创建 假设Student表中某一学生要变更其主码S#的值,如使其原来的98030101变更为99

  • 数据库概念基础

    1.模型: 概念模型:把现实世界转化为信息世界的模型,即E-R模型(通过E-R图表示) 实施模型:将信息世界使用的模型转化为数据世界使用的模型,关系模型(通过表数据表示) 2.不同关系的实体间E-R图表示: (1)两个实体集间一对一关系的绘制: 假设某个学院有若干个系,每个系只有一个主任 分析:主任和系是一对一关系 主任的属性:编号,姓名,年龄,学历 系的属性:系编号,系名 主任和系是一个管理关系 (2)两个实体集之间的一对多的关系的绘制方法 假设在某仓库管理系统中,有两个实体集:仓库和商品。仓库用来存放

  • ER图(转)

          E-R图为实体-联系(Entity-Relation)图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。   构成E-R图的基本要素是实体型、属性和联系,其表示方法为:   · 实体型(Entity):用矩形表示,矩形框内写明实体名;比如学生张三丰、学生李寻欢都是实体。   · 属性(Attribute):用椭圆形表示,并用无向边将其与相应的实体连接...

  • 程序设计综合实验——集合的表示与实现

    通过代码编写生成随机数求集合元素规模较大的运算。通过键盘输入的方式求方程的解集、几数之间的公倍数等集合元素规模较小的运算。实验结果能够顺利实验集合的交集、并集、差集等运算。

  • 数据库实验四

    【代码】数据库实验四。

  • 苏州大学 数据库题库

    2数据库设计基础(完整版可去资源下载处下载压缩包) 1.学院的每名教师只能属于一个系,则实体系和实体教师间的联系是() 一对一 多对多 多对一 一对多 参考答案:D 试题评析 本题考查知识点是实体联系。 一对多联系表现为主表中每一条记录与相关表中的多条记录关联。每名教师只能属于一个系,-个系中可以有多名教师,所以系与老师的关系为一对多。 所以本题答案为D。 2.数据库管理系统(DBMS)是() 系统软件 硬件系统 一个完整的数据库应用系统 既包括硬件、也包括软件的系统 参..

  • 问题 C: C语言11.4

    问题 C: C语言11.4 时间限制:1 Sec内存限制:32 MB献花:107解决:92[献花][花圈][TK题库] 题目描述 设有若干个人员的数据,其中包含学生和教师。学生的数据中包括:号码、姓名、性别、职业、班级。教师的数据包括:号码、姓名、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。现在要求把这些数据放在同一个表格中储存,使用结构体中的共用体实...

  • 数据库实验八 触发器实验

    数据库实验八 触发器实验 掌握数据库触发器的设计和使用方法。 定义 BEFORE 触发器和 AFTER 触发器。能够理解不同类型触发器的作用和执行原理,验证触发器的有效性。

Global site tag (gtag.js) - Google Analytics