一个可绑定数据源的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 相关文章推荐
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
Javascript全局变量var与不var的区别深入解析
Dec 09 Javascript
angularjs中的单元测试实例
Dec 06 Javascript
javascript实现图片跟随鼠标移动效果的方法
May 13 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
Jun 04 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
Jul 01 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 Javascript
Angular使用Md5加密的解决方法
Sep 16 Javascript
浅谈mint-ui 填坑之路
Nov 06 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
Mar 14 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
Feb 16 Javascript
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
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php生成图片缩略图的方法
2015/04/07 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
Python提取频域特征知识点浅析
2019/03/04 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
基于python实现查询ip地址来源
2020/06/02 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
毕业生找工作的自我评价
2013/10/18 职场文书
小松树教学反思
2014/02/11 职场文书
捐资助学倡议书
2014/04/15 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
施工安全协议书范本
2014/09/26 职场文书
2014年医院后勤工作总结
2014/12/06 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python