html js 动态表格数据,HTML+JS动态表格

1. 设置固定列

ID日期星期

propName -- 属性名

valCalc -- 设置值时, 特定回调函数

2. 动态生成可变列

这里模拟服务器获取数据

// 返回数据的格式:

/*

{

points : Array,

pointDate : Date,

reportId : Number,

reportDatas : Map

}

*/

function getDate(date) {

var datas = [];

for (var i = 0; i < 5; i++) {

var reportDatas = {};

reportDatas['1002'] = {reportVal:rd(203), reportTotal:203};

reportDatas['1003'] = {reportVal:rd(204), reportTotal:204};

reportDatas['1007'] = {reportVal:rd(205), reportTotal:205};

reportDatas['2003'] = {reportVal:rd(206), reportTotal:206};

reportDatas['2007'] = {reportVal:rd(207), reportTotal:207};

datas[i] = {

reportId : 1000 - i,

titles : ['1002', '1003', '1007', '2003', '2007'],

pointDate : date.addDays(0 - i),

reportDatas : reportDatas

}

};

return datas;

}

Ps :

通常开发顺序是: 先设计前端UI, 再根据需要的数据项生成对应的 JSON 对象

这里生成剩余的表头信息

// 生成需要的表头信息

function initTitles(grid, titles) {

var map = {};

// 留存数据

map["1002"] = "次日留存";

map["1003"] = "三日留存";

map["1007"] = "七日留存";

map["10015"] = "十五日留存";

// 保留数据

map["2003"] = "三日保留";

map["2007"] = "七日保留";

// 找到表头区域

var heads = grid.find("thead").find("tr");

$.each(titles, function(idx, val) {

var title = $("

", {

typeVal : val,

html : map[val],

floor : "2"

}).appendTo(heads);

});

}

3. 填充数据

// 填充数据

function fillDatas(grid, datas) {

// 获取表头

var heads = grid.find("thead>tr>th");

// 填充值

var tbody = grid.find("tbody");

$.each(datas, function(dIdx, data) {

// 每次循环数据数组, 得到一个新的行对象

var tr = $("

").appendTo(tbody);

$.each(heads, function(idx, head) {

head = $(head);

var floor = parseInt(head.attr("floor"));

fillData(floor, grid, data, head).appendTo(tr);

});

});

}

下面是填充单行数据时需要用到的回调函数

function fillData(floor, grid, data, head) {

switch(floor) {

// 一级属性

case 1 :

// 获取一级属性值

var val = data[head.attr("propName")];

// 调用处理函数

var fn = head.attr("valCalc");

fn && (val = eval(fn)(data));

// 追加到数据区域

var td = $("

", {

html : val

});

return td;

// 二级属性

case 2 :

var td = $("

", {

html : getPercent(head, data)

}).css({

"text-align" : "right"

});

return td;

default :

window.console && console.log("无匹配的floor值:" + floor);

}

}

如果对应的 floor 值为 1, 则表示可直接获取当前属性值. 否则需要解析后才能获取值(假设当前仅有两种属性层次定义), 作者当前需求很简单, 仅仅获取百分比

// 获取二级属性指定值 --

function getPercent(head, data) {

var typeVal = head.attr("typeVal");

var thisData = data.reportDatas[typeVal];

var percent = thisData.reportVal / thisData.reportTotal * 10000;

var val = parseInt(percent) / 100 + "";

var idx = val.lastIndexOf(".");

if (idx == -1) {

val += ".";

idx = val.lastIndexOf(".");

}

if (idx == val.length - 1) {

val += "00";

}

return val + "%";

}

运行效果如图, 关于下面图表部分, 请参阅 HighCharts 文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值