Jquery制作可以绑定的表格
//总页数 当前页 可见页 参数 翻页执行后处理的函数
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:;">«</a></li>',
next: '<li class="next"><a href="javascript:;">»</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制作可以绑定的表格的更多相关文章
- JQuery Easy Ui dataGrid 数据表格 ---制作查询下拉菜单
JQuery Easy Ui dataGrid 数据表格 数据表格 - DataGrid 继承$.fn.panel.defaults,使用$.fn.datagrid.defaults重载默认值.. 数 ...
- JQuery制作网页——第五章 初识 jQuery
1.jQuery简介: ● jQuery由美国人John Resig于2006年创建 ● jQuery是目前最流行的JavaScript程序库,它是对JavaScript对象和函数的封装 ● 它的设计 ...
- jQuery动态增删改查表格信息,可左键/右键提示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 使用Vue.js制作仿Metronic高级表格(一)静态设计
Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...
- jQuery制作弹出窗(模态框)
来源:(二少)在南极 ##index.html <!DOCTYPE html><html lang="zh"><head> <meta c ...
- 解密jQuery事件核心 - 绑定设计(一)
说起jQuery的事件,不得不提一下Dean Edwards大神 addEvent库,很多流行的类库的基本思想从他那儿借来的 jQuery的事件处理机制吸取了JavaScript专家Dean Edwa ...
- jquery制作论坛或社交网站的每天打卡签到特效
效果:http://hovertree.com/texiao/jquery/50/ 现在许多社区,购物等网站都设置签到功能,打开可以收获经验.虚拟币等,提高用户粘性,增加浏览量,是一个不错的功能.本文 ...
- 如何使用jQuery 制作全屏幕背景的嵌入视频
实际效果查看:http://keleyi.com/keleyi/phtml/jqtexiao/28.htm 请使用支持HTML5的浏览器查看本效果. 完整代码如下: <!doctype html ...
- 关于Jquery的delegate绑定事件无效
今天在做一个页面,用的是easyui页面有很多的tabs,里面都放了iframe 需要在load事件动态调整iframe高度 发现始终无法使用delegate来绑定load事件. 纠结了一下午发现了问 ...
随机推荐
- 《Head First 设计模式》ch.1 策略(Strategy)模式
策略模式 定义了算法族,分别封装起来,让它们可以互相替换,让算法的变化独立于使用算法的客户. 模式名词的意义 威力强大,交流的不止是模式名称,而是一整套模式背后所象征的质量.特性.约束 用更少的词汇做 ...
- jdk的反射机制
反射的作用 1)在运行时判断任意一个对象所属的类: 2)在运行时构造任意一个类的对象: 3)在运行时判断任意一个类所具有的成员变量和方法: 4)在运行时调用任意一个对象的方法. 5)反射API可以获取 ...
- 为什么要使用Spark?
现有的hadoop生态系统中存在的问题 1)使用mapreduce进行批量离线分析: 2)使用hive进行历史数据的分析: 3)使用hbase进行实时数据的查询: 4)使用storm进行实时的流处理: ...
- Android7.0 拨号盘应用源码分析(一) 界面浅析
前言 android拨号盘的源码目录在package/app/Dialer 自7.0以后Incallui的源码直接放到了Dialer目录下,虽然在7.0以前incallui有自己独立的目录,但实际编译 ...
- EF调用存储过程遇到的问题
注意 实体类Statistics的字段名和存储过程返回集合的列名要相同才行
- 彼得原理(The Peter Principle)
一. 关于彼得原理(The Peter Principle) 彼得原理(The Peter Principle)是由美国管理学家劳伦斯·彼得(Laurence.J.Peter)根据千百个有关组织中不能 ...
- USACO Section 3.2 香甜的黄油 Sweet Butter
本题是多源最短路问题 但使用弗洛伊德算法会超时 而因为边数目比较少 所以用队列优化后的迪杰斯特拉算法可以通过 #include<iostream> #include<cstring& ...
- 数学对象Math ceil()、floor()、round()方法
Math.ceil() 功能:对一个数进行上取整. 语法:Math.ceil(x) 参数: x:一个数值. 返回值:返回大于或等于x,并且与之最接近的整数. 注:如果x是正数,则把小数“入”: ...
- myeclipse关闭properties文件自动转义
1.如图,源代码是这样: 2.保存后重新打开变成这样: 3.解决方法如下:
- Rich控件一
Calendar控件 Calendar控件用来在Web页面中显示日历中的可选日期,并显示与特定日期关联的数据. 控件声明代码如下: <asp: Calendar id=" Calend ...