在日常开发工作中,总是遇到通过异步请求数据并用表格展示的的场景,看到很多解决此类问题通常采用拼字符串的形式,如:
//js示例代码 var td1="<td>B000123</td>"; var td2="<td>张三</td>"; var td3="<td>2017-09-17</td>"; var td4="<td><a href="#" class="btn btn-default">编辑</a></td>"; var tdn=......//此处省略好多列 var trString="<tr>"+td1+td2+td3+td4+tdn+"</tr>"; $("#tablelist").append(trString); //向ID为tablelist的表格追加行
以上的方式采用数据和表格混合的方式可以满足需求并实现效果,但是遇到业务需求变动,导致表格列增加、减少、前后调整时,修改以上代码回很苦恼,甚至导致形如【$(this).find('td').eq(6).find('input').val() 】的代码直接报错,原因就在于数据与布局没有分离。
本着数据与布局分离的思想,把生成行的代码分离出来,列的展现形式由表格决定,数据只负责向表格对应的列绑定数据即可,于是采用了以下方式:
HTML布局部分:
<table class="table table-hover" id="tablelist"> <thead> <tr class="active"> <th fname="fnum">No.</th> <th fname="checkbox"><input type="checkbox" selectall="fid"/></th> <th fname="fempnum">编号</th> <th fname="fempname">姓名</th> <th fname="fstatus">状态</th> <th fname="fredate">时间</th> <th fname="fope">操作</th> </tr> </thead> <tbody> </tbody> <tfoot> <tr class="active"><td>【分页代码】</td></tr> </tfoot> </table>
JS部分:
//定义表格ID var tableListId= "tablelist"; //定义tfoot跨列数 var tablecolnum; //定义表格列名 var colNames; $(function () { //设置tfoot跨列数 tablecolnum = setTablefootcolspan(tableListId); //获得表格列名 colNames = getTableListColNames(tableListId); //加载添加数据 getDataTable(tablelistid) }); //数据加载调用函数示例,现实应用场景是从服务器端请求Json方式 function getDataTable(objTableID) { removeTbodyHtml(tableListId); //移除tbody内容 //定义数据格式 row = { index:"", fnum: "", checkbox: "", fempnum: "", fempname: "", fredate: "", fstatus: "", fope: "" } //从接口获取数据后改造以下过程 for (i = 0; i < 6; i++) { //赋值 row.index = i; row.fnum = i+1; row.checkbox = "<input type='checkbox' name='fid' value='" + i + "'/>"; row.fempnum = "C000"+row.fnum; row.fempname = "张三" + row.fnum; row.fstatus = "已启用"; row.fredate = "2017-09-17 12:12:11"; row.fope = "<a href='#' class='btn btn-default'>进入</a>"; var trAttrs = " class='warning'"; //自定义行样式,当然可以定义更多 //绑定数据到表格, row.index 必须唯一否则会引起行之间相互覆盖 BindDataTable(objTableID, colNames, row.index, row, trAttrs) } } //************绑定数据的通用JS函数 S********** //获得表格列名 function getTableListColNames(tableListId) { var colNames = []; var tablecolnum = $("#" + tableListId + " thead tr th").length; for (col = 0; col < tablecolnum; col++) { colNames[col] = $("#" + tableListId + " thead th:eq(" + col + ")").attr("fname"); } return colNames; } //设置tfoot跨列数 function setTablefootcolspan(tableid) { tablecolnum = $("#" + tableid + " thead tr th").length; if ($("#" + tableid + " tfoot") != undefined) { $("#" + tableid + " tfoot tr td").attr("colspan", tablecolnum); } return tablecolnum; } //移除tbody function removeTbodyHtml(objTableID) { $("#" + objTableID + " tbody").children().remove(); } ///加载表格数据 ///objTableID: 表格ID ///colNames:表格列名数组 ///rowsIdx: 主键索引值 ///rows:数据模型 ///trAttrs:行熟悉,可自定义 function BindDataTable(objTableID, colNames, rowsIdx,rows,trAttrs) { var trbefor="",trafter="",tdstr=""; if(trAttrs==undefined){trAttrs="";} trbefor = "<tr rowid='tr" + rowsIdx + "' id='tr" + rowsIdx + "' "+trAttrs+">"; for (col = 0; col < colNames.length; col++) { if (rows[colNames[col]] == undefined) { tdstr += "<td></td>"; } else { tdstr += "<td>" + rows[colNames[col]] + "</td>"; } } trafter= "</tr>"; //判断更新还是新增 if ($("#" + objTableID + " tbody tr[rowid='tr" + rowsIdx + "']").length == 0) { $("#" + objTableID + " tbody").append(trbefor+tdstr+trafter); } else { $("#" + objTableID + " tbody tr[rowid='tr" + rowsIdx + "']").html(tdstr); } tdstr = ""; } //************绑定数据JS函数 E**********
如此当表格需要调整时,只需要改变表格的Thead的位置即可,其他一切由数据决定,具体效果如下:
注意:
1. 表格必须有唯一id
2. 表格必须包括thead,tbody,tfoot属性
3. 表格thead的单元格必须是 th 且必须有列明,如 fname="fname", 一一对应定义数据格式,如果不对应则不显示该列
以上是如何采用table和jQuery加载数据并实现数据与表格布局的分离的详细内容。更多信息请关注PHP中文网其他相关文章!

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3汉化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver CS6
视觉化网页开发工具