我想很多童鞋用js动态向表格中添加数据很熟悉,而且也觉得非常简单!是的,对于写页面的童鞋来说,最喜欢写查询的页面了,动态向表格绑定数据。用for循环就可以轻松搞定。

如果我们的业务需求有所变化,可能我们要的数据就不是这样一条一条的中规中矩的。如果你还是新手,又没有人教你,在网上又搜不到方法,可以告诉你一个简便的方法,那就是让后台写服务的同事在后台把数据拼接好返回给你,当然了,这种无理的要求一般大部分会遭到拒绝的,那怎么办呢?动脑子了。。。

下面列举一下我经常遇到的一些表格格式:

1. 固定的表头,固定的列数据

这种的话是最简单不过的了,后台丢给你的数据也是一条一条的,你只要按顺序去绑定就可以了

2. 固定的表头,列数据不固定

这种的话,对于没写过的童鞋来说,刚开始可能有点手足无措,但是一旦方法找到了,就会发现没有什么难度了,这样的情况中,一般数据都是以单元格形式一条条的返回的。也就是给你的数据,可能是只能填充一个单元格的,这样的情况一般出现在统计表格中。那要如何去遍历后台返回的数据,然后正确的填充表格中去呢?

我的方法是这样的,首先表头是固定的,这就好办了,这样的话,你就先把表头写好,每个表头给一个相应的class用来区分。然后给的列数据当中,第一行中肯定有一个唯一的id,一般这种都是以人为主键的id。我们这里就假如是查客户的一些信息。比方,你查的是客户,那么你肯定要将客户的名称作边这个表格的第一列,这个时候,表格中tbody的每一行tr的第一个单元格td肯定是存放你的客户名称,这个时候,你就把客户的id作为这一行的唯一标识:

       <table>
</thead>
<th>姓名</th>
<th class='fl-1'>分类1</th>
<th class='fl-2'>分类2</th>
<th class='fl-3'>分类3</th>
</thead>
<tbody>
<tr data-id='"+customerId+"'>
<td>张三</td>
<td class='fl-1'>10</td>
<td class='fl-2'>20</td>
<td class='fl-3'>30</td>
</tr>
</tbody>
</table>

但是表格填充和普通的元素填充是不一样的。因为表格的话你不能想在哪里填充就在那里填充,一个表格看起来是要完整的。所以你在填充的时候,先将一行先填充起来,再往里面填充数据。假如我们这个是一个4列的动态数据。你就可以这样去填充。

  //假如从后台返回的数据结果是一个json格式的 result;
var customerId=result.customerId;
if($("table tbody tr").length==0){//表示你的表格还没填充任何一条数据
$("table tbody").append("<tr data-id='"+customerId+"'><td></td><td></td><td></td></tr>");
}else{
/*假如这个时候你的表格中已有添加过数据了!那这个时候,新的一条数据要怎么办呢?那这个时候要判断这条是一条新数据,还是一条应该往已有行单元格里填充。那你就可以根据customerId判断了*/ //如果是一条需要你往已有表格里填的数据
if($("table tbody tr[data-id='"+customerId+"']").length>0){
//这个时候看给你的数据分类了。假如结果是这样的(一般都是用循环解析数据的,我在这里就简写了)
var fl=reslut.list[i].fl;//获取分类
var fl-value=result.list[i].fl-value;//获取分类值
//下面这种写法就会将对应的数据填充到对应的单元格
$("table tbody tr[data-id='"+customerId+"'] td."+fl).text(fl-value);
}else{//表示将添加一条新数据
$("table tbody").append("<tr data-id='"+customerId+"'><td></td><td></td><td></td></tr>");
//继续用填充所要的数据就可以了
}
}

3.表头不固定,列数据也不固定

这种情况的话一般比较少见,但是是有的。假如我们的需求是统计公司的所有的员工的签到信息,然后表头的话是根据时间去动态生成的。那这个时候我们要怎么做呢?

首先,根据时间去查询表头,让后台返回一个表头的数据,我们先填充好表头,然后按钮第2种情况中所说的,给表头加一个class属性,这样的话,后面就和第2种情况差不多了。我就不细说了

总结,在第2种情况和第三种情况中,我们一般在填充tbody中的数据的时候,首先一定要添加一行后,再去添加数据,我一般用比较笨的方法,是填充一个td有class数据为空的行,这样的话,当我得到数据的时候,我就可以直接准确的定位到我所需要填充数据的单元格中。

其实这种不固定的表格数据填充,只要你掌握方法了,那么你就会发现,其实不难,如果方法找不到,你在那里墨迹一天也不一定有进展,你的思路一定要清晰。 
如果还有不懂的童鞋,可以给我留言,。你也可以将你的数据以文本形式发给我,我给你写成一个demo。

浅谈js中如何动态添加表头/表列/表格内容的更多相关文章

  1. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  2. 浅谈JS中的闭包

    浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...

  3. 浅谈JS中 var let const 变量声明

    浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...

  4. 由项目浅谈JS中MVVM模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.    背景 最近项目原因使用了durandal.js和knock ...

  5. js架构设计模式——由项目浅谈JS中MVVM模式

    1.    背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...

  6. 浅谈js中继承的理解和实现

    一.前言 java.C#等正统面向对象语言都会提供类似extend之类的处理类的继承的方法,而javascript并没有提供专门的方法用于继承,在javascript中使用继承需要一点技巧.js中实例 ...

  7. 浅谈js中的MVC

    MVC是什么? MVC是一种架构模式,它将应用抽象为3个部分:模型(数据).视图.控制器(分发器) 本文将用一个经典的例子todoList来展开 一个事件发生的过程(通信单向流动): 1.用户在视图V ...

  8. 浅谈JS中 reduce() 的用法

    过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它.事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce ...

  9. 浅谈js中的数据类型,使用typeof获取js数据类型

    JS中的数据类型 1):Undefined——值未定义 注:Undefined类型只有一个值,即特色的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined ...

随机推荐

  1. 如何判断img标签是否有src属性

    前几天,写一个小项目,需要判断img标签是否有src属性,想了半天,只能想到用jq实现,如下: if($(".img").attr("src")==undefi ...

  2. 基于Spring的最简单的定时任务实现与配置(一)

    朋友的项目中有点问题.他那边是Spring架构的,有一个比较简单的需要定时的任务执行.在了解了他的需求之后,于是提出了比较简单的Spring+quartz的实现方式. 注意本文只是讨论,在已搭建完毕的 ...

  3. w3c编程挑战-初级脚本算法

    之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流! 1.翻转字符串 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序 ...

  4. h5之scrollIntoView控制页面元素滚动

    如果滚动页面也是DOM没有解决的一个问题.为了解决这个问题,浏览器实现了一下方法,以方便开发人员如何更好的控制页面的滚动.在各种专有方法中,HTML5选择了scrollIntoView()作为标准方法 ...

  5. VS2017专业版和企业版激活密钥

    VS2017专业版和企业版激活密钥 Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q ...

  6. explode和implode的运用

    $kesu_list=DD('Kesu.Kesu')->kesu_list(); foreach($kesu_list[0] as $key=>$val){ $reason_id_list ...

  7. 【操作教程】SequoiaDB分布式存储教程

    1.各模式适用场景介绍 由于SequoiaDB对比其他的NoSQL有更多的方式将数据分布到多台服务器上,所以下面笔者为阅读者一一介绍每种分布式方式适合于哪种场景. 1.1 Hash 方式分布数据 在H ...

  8. 【TCP/IP详解 卷1:协议】 第18章TCP连接的建立与终止

    img { border: 1px solid black } T C P是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接. RST:复位连接,将连接重置,一般用在 ...

  9. 外部世界如何访问容器? - 每天5分钟玩转 Docker 容器技术(37)

    上节我们学习了容器如何访问外部网络,今天讨论另一个方向:外部网络如何访问到容器? 答案是:端口映射. docker 可将容器对外提供服务的端口映射到 host 的某个端口,外网通过该端口访问容器.容器 ...

  10. 利用libcurl进行post

    逛百度知道看到有个人提问:http://zhidao.baidu.com/question/1447092283140740700 C写HTTP应用只有疯子才会老老实实的SOCKET编程吧?我后来还是 ...