//总页数 当前页 可见页 参数 翻页执行后处理的函数
function PageTable(totalPages, currentPage, tableobj, url, where, columns) {
function PageTableAjax() {
initTable(tableobj);
$.ajax({
type: "POST",
url: url,
data: { where: where, page: currentPage },
dataType: "json",
success: function (rsp) {
if (rsp.pass) {
totalPages = rsp.pagination.PageCount;
currentPage = rsp.pagination.PageIndex;
bindTable(tableobj, rsp.rows, columns)
console.log("PageTablePaginator")
PageTablePaginator();
} else {
console.log(rsp.msg)
}
},
error: function (e, s, t) {
console.log("ajax error")
}
});
}
function PageTablePaginator() {
$.jqPaginator('ul.pagination', {
wrapper: '',
first: '<li class="first"><a href="javascript:;">首页</a></li>',
prev: '<li class="prev"><a href="javascript:;">&laquo;</a></li>',
next: '<li class="next"><a href="javascript:;">&raquo;</a></li>',
last: '<li class="last"><a href="javascript:;">尾页</a></li>',
page: '<li class="page"><a href="javascript:;">{{page}}</a></li>',
totalPages: totalPages,/*总数 */
visiblePages: 5,/*可见分页数*/
currentPage: currentPage,
onPageChange: function (num, type) {
if (type == "change") {
console.log('PageTableAjax')
PageTable(totalPages, num, tableobj, url, where, columns)
}
}
});
}
PageTableAjax();
}
//table初始化状态
function initTable(obj) {
console.log('initTable')
var head = $(obj).find('thead tr th');
var tbody = $(obj).find('tbody');
tbody.html("");
//无记录
var tr01 = $("<tr align=\"center\"></tr>");
$("<td colspan=\"" + head.length + "\">loading...</td>").appendTo(tr01);
tbody.append(tr01);
console.log('pagination:' + $('ul.pagination').length)
if ($('ul.pagination').length == 0) {
$(obj).after("<ul class=\"pagination\"></ul>");
}
}
function bindTable(obj, rows, columns) {
console.log('bindTable')
var tbody = $(obj).find('tbody');
tbody.html("");
var head = $(obj).find('thead tr th');
console.log("columns:" + columns.length);
if (rows[0] != 'undefined' && rows[0] != null) { for (var i = 0; i < rows.length; i++) {
var r = rows[i];
var tr = $("<tr></tr>");
for (var j = 0; j < columns.length; j++) {
var fieldstr = columns[j].field;
var valstr = r[fieldstr];
if (fieldstr.indexOf('.') != -1) {
//console.log("indexOf:" + fieldstr.substring(fieldstr.indexOf('.'), fieldstr.length))
var arr = fieldstr.split(".");
valstr = r[arr[0]][arr[1]];
switch(arr.length)
{
case 2:
valstr = r[arr[0]][arr[1]];
break;
case 3:
valstr = r[arr[0]][arr[1]][arr[2]];
break;
case 4:
valstr = r[arr[0]][arr[1]][arr[2]][arr[3]];
break;
default:
valstr = r[arr[0]][arr[1]];
}
} if (columns[j].formatter != 'undefined' && typeof columns[j].formatter === 'function') {
console.log('columns.formatter')
valstr = columns[j].formatter(valstr, i);
}
$("<td>" + valstr + "</td>").appendTo(tr);
}
tbody.append(tr);
}
} else { //无记录
var tr = $("<tr align=\"center\"></tr>");
$("<td colspan=\"" + head.length + "\">(暂无相关记录)</td>").appendTo(tr);
tbody.append(tr);
}
}

花费的时间有限,基本就是为了实现功能。
里面的分页插件是是使用了这个:http://www.oschina.net/p/jqpaginator

使用方法如下:

PageTable(10, 1, "#actionlist", "/Admin/ActionList", where,
[{
field: "Id", formatter: function (val, rec) {
return "<input name=\"aid\" type=\"checkbox\" value=\""+val+"\">";
}
},
{ field: "Id" },
{ field: "ActionName" },
{ field: "ActionUrl" },
{ field: "ActionGroupName" },
{
field: "Id", formatter: function (val, rec) {
return "<a href=\"javascrip:;\" onclick=\"loadContent('/Admin/ActionUpdate?aid=" + val + "',true)\">修改</a>";
}
}])

页面如下:

<table id="actionlist" class="pure-table pure-table-bordered">
<thead>
<tr>
<th><input name="aid_g" type="checkbox" title="全选/反选"></th>
<th>#</th>
<th>命令名</th>
<th>命令参数</th>
<th>分组名</th>
<th>操作</th>
</tr>
</thead> <tbody> </tbody>
</table>

解释如下:函数PageTable有如下参数
totalPages, currentPage, tableobj, url, where, columns(总页数,目标页,表格对象,请求的url,相关查询参数,还有字段列)

我后端是C#用MVC的Json返回:

return Json(new { rows = itemList, pagination = pageturn ,pass=true})

一个匿名对象:rows是行数据,pagination的分页数据,pass是告知数据是否正确。

函数的结构:PageTable函数是入口,先执行PageTableAjax函数,初始化表格(initTable函数)在请求数据,数据接收后,通知bindTable函数绑定数据,再通知PageTablePaginator函数绑定分页。最后在PageTablePaginator函数的每个分页绑定PageTable,达到分页的效果。

效果图如上,表格我是用pure的table样式,还不错。分页的样式是参考bootstrap,然后仔细修改,毕竟bootstrap的css文件太大,不如pure小巧(只有5KB)

Jquery制作可以绑定的表格的更多相关文章

  1. JQuery Easy Ui dataGrid 数据表格 ---制作查询下拉菜单

    JQuery Easy Ui dataGrid 数据表格 数据表格 - DataGrid 继承$.fn.panel.defaults,使用$.fn.datagrid.defaults重载默认值.. 数 ...

  2. JQuery制作网页——第五章 初识 jQuery

    1.jQuery简介: ● jQuery由美国人John Resig于2006年创建 ● jQuery是目前最流行的JavaScript程序库,它是对JavaScript对象和函数的封装 ● 它的设计 ...

  3. jQuery动态增删改查表格信息,可左键/右键提示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 使用Vue.js制作仿Metronic高级表格(一)静态设计

    Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...

  5. jQuery制作弹出窗(模态框)

    来源:(二少)在南极 ##index.html <!DOCTYPE html><html lang="zh"><head> <meta c ...

  6. 解密jQuery事件核心 - 绑定设计(一)

    说起jQuery的事件,不得不提一下Dean Edwards大神 addEvent库,很多流行的类库的基本思想从他那儿借来的 jQuery的事件处理机制吸取了JavaScript专家Dean Edwa ...

  7. jquery制作论坛或社交网站的每天打卡签到特效

    效果:http://hovertree.com/texiao/jquery/50/ 现在许多社区,购物等网站都设置签到功能,打开可以收获经验.虚拟币等,提高用户粘性,增加浏览量,是一个不错的功能.本文 ...

  8. 如何使用jQuery 制作全屏幕背景的嵌入视频

    实际效果查看:http://keleyi.com/keleyi/phtml/jqtexiao/28.htm 请使用支持HTML5的浏览器查看本效果. 完整代码如下: <!doctype html ...

  9. 关于Jquery的delegate绑定事件无效

    今天在做一个页面,用的是easyui页面有很多的tabs,里面都放了iframe 需要在load事件动态调整iframe高度 发现始终无法使用delegate来绑定load事件. 纠结了一下午发现了问 ...

随机推荐

  1. 在解决方案中所使用 NuGet 管理软件包依赖

    使用程序包恢复功能可以在提交源代码时, 不需要将代码库提交到源代码管理中,大幅减少项目的尺寸.所有NuGet程序包都存储在解决方案的Packages文件夹中. 要启用程序包恢复功能,可右键单击解决方案 ...

  2. [Java] 我的Coding Style 总结

    1. 缩进 采用4个空格的缩进方式 2. tab 不采用"hard" tab. 需要更改编辑器的默认配置.将tab值改成4个空格. 3. 换行 3.1 一行不超过75个字符 3.2 ...

  3. Stay Hungry

    保持饥饿,从身体上来说,可以随时保持机动状态,所以,今天的早饭.午饭.晚饭,我都没有吃到饱.等到想要放松的时候,就饱餐一顿,未必不是一种幸福!精神上,保持饥饿,我还不清楚是一种什么样的状态,自然也描述 ...

  4. MSP430F149学习之路——时钟1

    1.看门狗产生方波 #include <msp430x14x.h> void main() { WDTCTL = WDT_MDLY_32; IE1 |= WDTIE; P1DIR |= B ...

  5. devexpress中应用于girdviw中HtmlDataCellPrepared事件与CellEditorInitialize事件的区别

    HtmlDataCellPrepared 事件为页面展示的时候对页面做的初始化(将id变为name) ​CellEditorInitialize 事件为页面在编辑时(新增.修改)时做的初始化,如将值填 ...

  6. express 框架初步体验

    一. 安装express 1.打开cmd  全局安装express 输入:npm install -gd express 2. 安装命令行工具,不然你输入express 会出现 不是内部命令. 输入: ...

  7. WP_3种磁贴效果设置

    private void ApplicationBarIconButton_Click_1(object sender, EventArgs e) { var tileData = new FlipT ...

  8. mac 显示隐藏文件夹

    在终端输入   defaults write com.apple.finder AppleShowAllFiles -boolean true;killall Finder即可

  9. 【风马一族_mysql】MySQL免安装版环境配置图文教程

    mysql存放在某一个磁盘中(笔者使用E盘) 配置系统变量 打开 电脑的属性 点击 高级系统设置 选择 高级 点击 环境变量 选择 系统变量 点击 变量Path,追加 值 E:\mysql-5.6.2 ...

  10. linux查找日志常用命令

    1.查找文件test中目标字符串(xxxx)出现的行数位置grep -n xxxx  test 2.文件test从某一行(n)开始显示more +n  test 3.查询文件test中出现目标字符串x ...