一个可绑定数据源的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 相关文章推荐
使用正则替换变量
May 05 Javascript
jquery tab插件精简版分享
Sep 10 Javascript
JavaScript起点(严格模式深度了解)
Jan 28 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
Apr 02 Javascript
jQuery中each()方法用法实例
Dec 27 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
Bootstrap中的Panel和Table全面解析
Jun 13 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
Mar 05 Javascript
原生js封装的ajax方法示例
Aug 02 Javascript
小程序和web画三角形实现解析
Sep 02 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
Aug 08 Javascript
浅谈react路由传参的几种方式
Mar 23 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php 代码优化的42条建议 推荐
2009/09/25 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
php控制文件下载速度的方法
2015/03/24 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
轻松实现php文件上传功能
2017/02/17 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
使用SAE部署Python运行环境的教程
2015/05/05 Python
json跨域调用python的方法详解
2017/01/11 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
答谢会策划方案
2014/05/12 职场文书
建党伟业电影观后感
2015/06/01 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL