jquery: json树组数据输出到表格Dom树的处理方法
项目背景
项目中需要把表格重排显示
处理方法
思路主要是用历遍Json数组把json数据一个个append到5个表格里,还要给每个单元格绑定个单击弹出自定义对话框,表格分了单双行,第一行最后还要改rowspan,程序还没优化运行正常先给客户展示先
1,表格数据->json数组
2,json树组数据输出到表格Dom树
2015/3/25日已优化并重构程序
/**
* @create: nelson
* @initITMTableV2 初始化表格内容
* @调用方式
$("#main_content").initITMTableV2(list,popup);
*/
$.fn.extend({
bindTdClink: function (Target, jsonObj) {
var This = $(this);
var $Target = $(Target);
$Target.find(".popup_more").attr("href", "/item=" + jsonObj['ID']).attr("target", "_blank");
$Target.find(".p_title").text(jsonObj['Product Name']);
//$Target.find(".popup_c td").each(function (n) {
$Target.find(".p_even_r td").each(function (n) {
var That = $(this);
switch (jsonObj[n + 1]) {
case "Complete":
That.html('<img src="/images/circle_green.png" />');
break;
case "On-going":
That.html('<img src="/images/circle_yellow.png" />');
break;
case "Not applicable":
That.html('<img src="/images/circle_red.png" />');
break;
default:
That.html('');
break;
}
});
$Target.show();
$Target.prev().show();
},
//获取listView的数据转化为json数组
getJsonArrFromListView: function () {
var This = $(this);
var keyArr = new Array(),
jsonArr = new Array();
This.find("thead th").each(function () {
keyArr.push($(this).text().trim());
});
This.find("tbody tr").each(function () {
var jsonObj = {};
$(this).find("td").each(function (n) {
jsonObj[keyArr[n]] = $(this).text().trim();
});
jsonArr.push(jsonObj);
});
return jsonArr;
},
initITMTableV2: function (list, popup) {
var This = $(this),
$list = $(list);
var keyArr = new Array(),
jsonArr = new Array(),
yearArr = new Array(); jsonArr = $list.getJsonArrFromListView(3);
//计算起始年份
var startYear = (function (jsonArr) {
var result = 2000;
$.each(jsonArr, function (entryIndex, entry) {
var temp = Number(entry['CY']);
if (temp > result) {
result = temp;
}
});
return result - 4;
})(jsonArr);
//构建表格
(function (jsonArr, startYear) {
var tableTpl = '<table class="itm_table"><thead><tr><th></th><th></th><th></th><th></th><th></th><th></th></tr></thead><tbody><tr class="odd"><td rowspan="1">{tableTitle}</td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>';
var configs = {
titleArr: new Array(),
col: 5,
strHtml: "",
targetJsonArr: new Array(),
tLength: function () { return this.titleArr.length; }
};
$.each(jsonArr, function (entryIndex, entry) {
for (var i = 0; i < 5; i++) {
if (entry['CY'] == startYear + i) {
configs.targetJsonArr.push(entry);
var title = entry['Product Type'];
if (configs.titleArr.length == 0) {
configs.titleArr.push(title);
}
else {
var newTitleFlag = true;
for (var j = 0; j < configs.titleArr.length; j++) {
if (configs.titleArr[j] == title) {
newTitleFlag = false;
break;
}
}
if (newTitleFlag) {
configs.titleArr.push(title);
}
}
}
}
});
//生成空表格
for (var i = 0; i < configs.tLength() ; i++) {
configs.strHtml += tableTpl.replace("{tableTitle}", configs.titleArr[i]);
}
This.html(configs.strHtml);
//插入数据
var jArr = configs.targetJsonArr;
$.each(jArr, function (entryIndex, entry) {
var title = entry['Product Type'],
cy = entry['CY'],
name = entry['Product Name'];
for (var i = 0; i < 5; i++) {
if (cy == startYear + i) {
for (var j = 0; j < configs.tLength() ; j++) {
if (title == configs.titleArr[j]) {
var needAppend = true,
isOddRow;
This.find(".itm_table:eq(" + j + ")").find("tbody>tr").each(function (n) {
var obj = $(this),
self = (n == 0) ? obj.find("td:eq(" + (i + 1) + ")") : obj.find("td:eq(" + i + ")");
isOddRow = (obj.attr("class") == "odd");
if (self.html() == "") {
self.text(name);
self.click(function () { $(this).bindTdClink(popup, entry); }).css("cursor", "pointer");
needAppend = false;
return false;
}
});
if (needAppend) {
var oddTpl = '<tr class="odd"><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td></tr>',
evenTpl = '<tr class="even"><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td></tr>',
reg = new RegExp("{\\d{1}}", "g");
if (isOddRow) {
This.find(".itm_table:eq(" + j + ")")
.find("tbody")
.append(evenTpl.replace('{' + i + '}', name).replace(reg, ""))
.find(">tr:last")
.find("td:eq(" + i + ")")
.click(function () { $(this).bindTdClink(popup, entry); })
.css("cursor", "pointer");
}
else {
This.find(".itm_table:eq(" + j + ")")
.find("tbody").append(oddTpl.replace('{' + i + '}', name).replace(reg, ""))
.find(">tr:last")
.find("td:eq(" + i + ")")
.click(function () { $(this).bindTdClink(popup, entry); })
.css("cursor", "pointer");
}
}
}
}
}
}
});
//初始化年份显示
This.find(".itm_table:eq(0)").find("thead").html('<tr>'
+ '<th></th>'
+ '<th><img src="/images/arrow_red.png" /><span class="cy">CY2014</span></th>'
+ '<th><img src="/images/arrow_green.png" /><span class="cy">CY2015</span></th>'
+ '<th><img src="/images/arrow_purple.png" /><span class="cy">CY2016</span></th>'
+ '<th><img src="/images/arrow_blue.png" /><span class="cy">CY2017</span></th>'
+ '<th><img src="/images/arrow_orange.png" /><span class="cy">CY2018</span></th>'
+ '</tr>');
This.find(".itm_table:eq(0)").find(".cy").each(function (n) {
yearArr.push((startYear + n).toString());
$(this).text("CY" + yearArr[n]);
});
//初始化行的rowspan
This.find(".itm_table").each(function () {
var self = $(this);
var len = self.find("tbody>tr").length;
self.find("tbody>tr:first").find("td:eq(0)").attr("rowspan", len).css("font-weight", "bold");
});
var $popup = $(popup);
$popup.find(".popup_x").click(function () {
$popup.hide();
$popup.prev().hide();
}); })(jsonArr, startYear); }
});
jquery: json树组数据输出到表格Dom树的处理方法的更多相关文章
- jQuery操作列表数据转成Json再输出为html dom树
jQuery 把列表数据转成Json再输出为如下 dom树 <div id="menu" class="lv1"> <ul class=&qu ...
- JQuery + JSON作为前后台数据交换格式实践
JQuery + JSON作为前后台数据交换 JQuery提供良好的异步加载接口AJAX,可以局部更新页面数据, http://api.jquery.com/category/ajax/ JSON作为 ...
- echart+jquery+json统计TP数据
由于工作需要,需要统计交易数据的TP50,TP90,TP95,TP99.采用的前端技术是jquery+json+echart. 一.TP定义(谷歌) Calculating TP is very si ...
- json与xml数据输出类
class Response { /** * 按json方式输出通信数据 * @param integer $code 状态码 * @param string $message 提示信息 * @par ...
- excel多组数据散点图生成
在研究数据分布时,散点图是一类比较常用的方法,通过三点图可以很好的显示数据的分布位置.一组数据生成散点图,利用excel是很容易生成的:但是,多组数据生成散点图,不同组数据用不同颜色表示,那该怎么生成 ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
- 处理JSON格式的数据
JSON格式的数据是最常用的数据格式,处理方法的选择就显得比较重要了.我常用的一种是用对象来接收,然后保存在数组中,需要时直接从数组中取值.下面列出一个小例子. .h文件中: #import < ...
- Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented
在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...
- WebKit Inside: DOM树的构建
当客户端App主进程创建WKWebView对象时,会创建另外两个子进程:渲染进程与网络进程.主进程WKWebView发起请求时,先将请求转发给渲染进程,渲染进程再转发给网络进程,网络进程请求服务器.如 ...
随机推荐
- Yii里获取当前controller和action的id
Yii里获取当前controller和action的id 在控制器里$name = $this->getId(); // controller$name = $action->id; ...
- 整合Struts2、Hibernate、Spring
将项目中的对象和对象之间的管理,纳入spring容器,由spring管理 1 实现spring+hibernate集成 1.1 新建web项目 建立项目的包结构(package) 1.2加入jar包 ...
- ios cell展示可滑动的图片
需求: 点击cell上的图片.图片以原图显示出来,可以放大或缩小.再次点击图片移除图片显示原来界面.(和QQ空间看图片类似) 点击图片实现效果: 1. 自定义一个 UITableView (KDIma ...
- 3ds max画曲线 设置摄像机的起始位置
参考 http://www.3dmax8.com/3dmax/2013/0916/5661.html 如果想创建曲线段,可以在单击下一个点时按住鼠标不放,继续拖曳,再拖到另一个点上,单击鼠标右键,即可 ...
- ubuntu 添加环境变量
转自:http://hi.baidu.com/mario05/item/02b6d60ff7371136a2332a48 Ubuntu Linux系统环境变量配置文件:/etc/profile : 在 ...
- Mac 制作 10.11.3 U盘安装盘
U盘要且只分一个区 Mac OS 拓展(日志式) GUID分区表: 将“安装 OS X El Capitan” 放到 应用程序文件夹下 命令: sudo /Applications/Instal ...
- 《Thinking in Java》十七章_容器深入研究_练习14(Page486)
练习14 Properties的继承树如下:
- 《Thinking in Java》十七章_容器深入研究_练习12(Page484)
练习12: 练习使用HashMap / LinkedHashMap / TreeMap import java.util.HashMap; import java.util.LinkedHashMap ...
- Qt Designer怎样加入资源文件
Qt Designer中如果在设计UI界面的时候要加入一些图素,图标等资源的时候是不能直接添加进去的,需要在Qt开发目录下编写QRC文件 qrc文件格式如下: <RCC> <qres ...
- 排序练习【sdut 1582】【堆排序】
排序 Time Limit: 1000ms Memory limit: 32678K 有疑问?点这里^_^ 题目描述 给你N(N<=100)个数,请你按照从小到大的顺序输出. 输入 输入数 ...