//总页数 当前页 可见页 参数 翻页执行后处理的函数
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. Android——开发环境

    sdk manager——>Tools 开发的工具类 sdk manager——>Extras——>Android support Library 支持高版本应用向低版本兼容 sdk ...

  2. 使用Spring的Property文件存储测试数据 - 添加测试数据

    测试数据直接写在Property文件中,如下图: application.properties是系统自动生成,我添加了两个Property文件:HomeTestData.properties和moto ...

  3. Filter Blue Light for Better Sleep(APP 推荐)

    Filter Blue Light for Better Sleep By Carolyn Mohr11 May, 2016 Many people like to use their phones ...

  4. 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

    算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification) 0.写在前面的话 我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比 ...

  5. 慕课网-安卓工程师初养成-4-3 Java条件语句之多重 if

    来源:http://www.imooc.com/code/1355 多重 if 语句,在条件 1 不满足的情况下,才会进行条件 2 的判断:当前面的条件均不成立时,才会执行 else 块内的代码.例如 ...

  6. Python批量插入SQL Server数据库

    因为要做性能测试,需要大量造数据到数据库中,于是用python写了点代码去实现,批量插入,一共四张表 简单粗暴地插入10万条数据 import pymssql import random __auth ...

  7. Java EXCEL导入的两种方式JXL和POI

    Excel导入有两个方法:JXL 和POI 1.JXL解析Excel public class JxlReadExcel { /**     * JXL解析Excel     * @author Da ...

  8. 学习练习 java 集合

    将1—100之间的所有正整数存放在一个List集合中,并将集合中索引位置是10的对象从集合中移除 package com.hanqi; import java.util.*; public class ...

  9. 洛谷P2723 丑数 Humble Numbers

    P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...

  10. 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

    P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 超时怎么办? ...