一个可绑定数据源的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 相关文章推荐
基于jquery的文章中所有图片width大小批量设置方法
Aug 01 Javascript
jquery重新播放css动画所遇问题解决
Aug 21 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
javascript实现延时显示提示框效果
Jun 01 Javascript
完美解决iview 的select下拉框选项错位的问题
Mar 02 Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
详解如何用webpack4从零开始构建react开发环境
Jan 27 Javascript
JavaScript函数的4种调用方法实例分析
Mar 05 Javascript
vue iview多张图片大图预览、缩放翻转
Jul 13 Javascript
Vue解析带html标签的字符串为dom的实例
Nov 13 Javascript
JavaScript TAB栏切换效果的示例
Nov 05 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 Class&amp;Object -- 解析PHP实现二叉树
2013/06/25 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
javascript globalStorage类代码
2009/06/04 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
python中的列表推导浅析
2014/04/26 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
python生成ppt的方法
2018/06/07 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
Python子类继承父类构造函数详解
2019/02/19 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
《骆驼和羊》教学反思
2014/02/27 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
讲座主持词
2014/03/20 职场文书
五分钟演讲稿
2014/04/30 职场文书
新法人代表任命书
2014/06/06 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
健康状况证明模板
2014/10/23 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers