一个可绑定数据源的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使用技巧精萃[代码非常实用]
Nov 21 Javascript
Input 特殊事件onpopertychange和oninput
Jun 17 Javascript
jquery 多行文本框(textarea)高度变化
Jul 03 Javascript
JavaScript获取/更改文本框的值的实例代码
Aug 02 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
Aug 21 Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
学习JavaScript设计模式之享元模式
Jan 18 Javascript
给angular加上动画效遇到的问题总结
Feb 17 Javascript
Jquery技巧(必须掌握)
Mar 16 Javascript
详解利用jsx写vue组件的方法示例
Jul 17 Javascript
详解vue项目中实现图片裁剪功能
Jun 07 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
Nov 19 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实现的MySQL通用查询程序
2007/03/11 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
讲解Python中的递归函数
2015/04/27 Python
Python引用模块和查找模块路径
2016/03/17 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
pycharm快捷键汇总
2020/02/14 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
仓库管理员岗位职责
2014/03/19 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
2015年考研复习计划
2015/01/19 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
python实现的web监控系统
2021/04/27 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python
一文搞懂Java中的注解和反射
2022/06/21 Java/Android