一个可绑定数据源的jQuery数据表格插件


Posted in Javascript onJuly 17, 2010

固定表头
列宽可调整
单击列头可排序
双击单元格可编辑
可绑定数据源

看下效果吧:
HTML - 模板代码:

<table id="test"> 
<tr class="header"> 
<td style="width: 100px;" sort='true'> 
姓名 
</td> 
<td style="width: 100px;" sort='true'> 
性别 
</td> 
<td style="width: 100px;" sort='true'> 
年龄 
</td> 
<td style="width:200px;" sort='true'> 
住址 
</td> 
</tr> 
<tr class="itemtemplate"> 
<td editable='true'> 
{姓名} 
</td> 
<td editable='true'> 
{性别} 
</td> 
<td editable='true'> 
{年龄} 
</td> 
<td editable='true'> 
{住址} 
</td> 
</tr> 
</table>

jsascript代码:
//测试数据 
var dataJsonStr='{tablename:"",rows:[{"姓名":"曹操","性别":"男","年龄":"51","住址":"许昌"},{"姓名":"诸葛亮","性别":"男","年龄":"40","住址":"南阳"},{"姓名":"周瑜","性别":"男","年龄":"40","住址":"江东"},{"姓名":"大乔","性别":"女","年龄":"30","住址":"江东"},{"姓名":"小乔","性别":"女","年龄":"28","住址":"江东"},{"姓名":"曹操","性别":"男","年龄":"51","住址":"许昌"},{"姓名":"诸葛亮","性别":"男","年龄":"40","住址":"南阳"},{"姓名":"周瑜","性别":"男","年龄":"40","住址":"江东"},{"姓名":"大乔","性别":"女","年龄":"30","住址":"江东"},{"姓名":"小乔","性别":"女","年龄":"28","住址":"江东"}]}'; 
//清空数据 
$('#test').DataGridClear(); 
//设定行样式 
$('#test').DataGridSetItemClass("tr1","tr2","trhover"); 
//绑定数据,并设置宽度高度 
$('#test').DataGrid("100%",200,dataJsonStr);

结构示意图:
一个可绑定数据源的jQuery数据表格插件
如何根据HTML模板创建DataGrid整个结构?
1.首先创建 表头 主体 等各区域:
TableBody.addClass('TableBody'); 
TableBody.wrap("<div id='"+MyTableId+"' class='houfeng-table'></div>"); 
var MyTable=$('#'+MyTableId); 
TableBody.data('MyTable',MyTable); 
TableBody.before("<table class='TableHead' ></table>"); 
var TableHead=MyTable.find(".TableHead"); 
TableBody.data('TableHead',TableHead); 
TableBody.wrap('<div class="TableBodyArea"></div>'); 
TableHead.wrap("<div class='TableHeadArea' onselectstart='return false;'></div>"); 
var TableBodyArea=MyTable.find('.TableBodyArea'); 
var TableHeadArea=MyTable.find('.TableHeadArea'); 
TableBody.data('TableBodyArea',TableBodyArea); 
TableBody.data('TableHeadArea',TableHeadArea);

上面代代中红色高亮 TableBody 为表主体, TableHead 为表头
2.创建表头
TableBody.find('.header').clone().prependTo(TableHead);

TableBody 其实便是HTML模板Table , 将 .header 的行移到到表头表格中作为表头.
3.创建表主体
创建表主体,其实便是根据数据源及模板 循环创建每一行 , 这里用了 上篇文章提到的 Repeater 来创建, 详细 请看用javascript实现Repeater.
4.处理当列过多时横向滚动条的问题
TableBodyArea.scroll(function (){ 
var ml=0-parseInt(TableBodyArea.attr('scrollLeft')); 
TableHead.css('margin-left',ml); 
});

TableBodyArea 为TableBody外包裹的一个Div
5.如何实现单元格编辑
双击td时在td中动态插入一个文件本框为将td的innerHTML给文本框,在文本焦点失去时,将文本框值赋给td的innerHTML,将移除文本框 代码如下:
TableBody.find('td').live('dblclick',function(){ 
var td=$(this); 
if(td.attr('editable')=='true') 
{ 
var text=td.text(); 
var html="<input type='text' class='TdEditTextBox' value='"+$.trim(text)+"' />"; 
td.html(html); 
td.addClass("tdediting"); 
// 
$(this).find('.TdEditTextBox').focus().focus().focus().focus(); 
$(this).find('.TdEditTextBox').blur(function(){ 
var val=$(this).val(); 
td.html(val); 
td.removeClass("tdediting"); 
}); 
} 
});

6. 如何排序:
由时间问题请容我下回分解!!
源码下载: /201007/yuanma/DataGrid.rar
作者:houfeng
出处:http://houfeng.cnblogs.com
Javascript 相关文章推荐
javascript 常用方法总结
Jun 03 Javascript
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
IE6-8中Date不支持toISOString的修复方法
May 04 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
jquery实现的下拉和收缩效果示例
Aug 21 Javascript
jQuery拖拽通过八个点改变div大小
Nov 29 Javascript
JS实现复制内容到剪贴板功能
Feb 05 Javascript
Jquery-data的三种用法
Apr 18 jQuery
详谈javascript精度问题与调整
Jul 08 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
Dec 07 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
jquery实现上传图片功能
Jun 29 jQuery
js跨域问题之跨域iframe自适应大小实现代码
Jul 17 #Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
Jul 17 #Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
Jul 17 #Javascript
基于jquery的Repeater实现代码
Jul 17 #Javascript
javascript onmouseout 解决办法
Jul 17 #Javascript
javascript 从if else 到 switch case 再到抽象
Jul 17 #Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 #Javascript
You might like
第1次亲密接触PHP5(2)
2006/10/09 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
Python单元测试实例详解
2018/05/25 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
python实现简单井字棋小游戏
2020/03/05 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
爱国口号
2014/06/19 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
2014年科研工作总结
2014/12/03 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
MySQL分区以及建索引的方法总结
2022/04/13 MySQL