一个可绑定数据源的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 一些用法小结
Sep 11 Javascript
js 自定义的联动下拉框
Feb 07 Javascript
关于Jquery操作Cookie取值错误的解决方法
Aug 26 Javascript
JS版的date函数(和PHP的date函数一样)
May 12 Javascript
js实现div拖动动画运行轨迹效果代码分享
Aug 27 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
jquery实现图片预加载
Dec 25 Javascript
实例详解ECMAScript5中新增的Array方法
Apr 05 Javascript
js实现密码强度检验
Jan 15 Javascript
Vue项目中使用WebUploader实现文件上传的方法
Jul 21 Javascript
vue-form表单验证是否为空值的实例详解
Oct 29 Javascript
Vue如何清空对象
Mar 03 Vue.js
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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
详解如何在Vue里建立长按指令
2018/08/20 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
处理Python中的URLError异常的方法
2015/04/30 Python
对python中的logger模块全面讲解
2018/04/28 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
主管职责范文
2013/11/09 职场文书
汽修专业学生自我鉴定
2013/11/16 职场文书
企业宣传标语
2014/06/09 职场文书
公司股东合作协议书
2014/09/14 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
论群众路线学习笔记
2014/11/06 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
商业计划书范文
2019/04/24 职场文书
Ajax实现三级联动效果
2021/10/05 Javascript
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python