jQuery(非HTML5)可编辑表格实现代码


Posted in Javascript onDecember 11, 2012

功能
单击单元格选中,选中过程中使用方向键更换选中的单元格,选中过程中按回车键或者直接双击单元格进入可编辑状态,单元格失去焦点时保存修改的内容。

主要实现思路
选中,移动选中区域等都是依靠jQuery强大的API进行实现的。而可编辑的单元格实际上是在选中单元格时,在单元格上面添加个input输入域,动态的更新数据

源代码
HTML代码:

<table class="editableTable"> 
<thead> 
<tr> 
<th>Item1</th> 
<th>Item2</th> 
<th>Item3</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td class="editable simpleInput">arthinking</td> 
<td class="editable simpleInput">Jason</td> 
<td class="editable simpleInput">itzhai</td> 
</tr> 
<tr> 
<td class="editable simpleInput">arthinking</td> 
<td class="editable simpleInput">Jason</td> 
<td class="editable simpleInput">itzhai</td> 
</tr> 
<tr> 
<td class="editable simpleInput">arthinking</td> 
<td class="editable simpleInput">Jason</td> 
<td class="editable simpleInput">itzhai</td> 
</tr> 
</tbody> 
</table>

CSS代码:
body{ 
text-shadow:#FFFFFF 1px 1px 1px; 
} 
.editableTable{ 
width: 220px; 
padding: 10px; 
background-color: #DDEEF6; 
border:1px solid #DDEEF6; 
-webkit-border-radius: 6px; 
-moz-border-radius: 6px; 
} 
.editableTable thead{ 
background:#FFFFCC; 
} 
td{ 
background:#66CCFF; 
cursor:pointer; 
} 
.selectCell{ 
background:#6699FF; 
}

JS代码:
var EdTable = function(){ 
// 给单元格绑定事件 
function initBindGridEvent(){ 
$("td.editable").unbind(); 
// 添加单元格点击事件 
addGridClickEvent(); 
// 添加单元格双击事件 
addGridDbClickEvent(); 
// 添加键盘事件 
addGridKeyPressEvent(); 
} 
// 给单元格添加单击事件 
function addGridClickEvent(){ 
$("td.simpleInput").bind("click",function(){ 
$('.simpleInput').each(function(){ 
$(this).removeClass("selectCell"); 
}); 
// 给选中的元素添加选中样式 
$(this).addClass("selectCell"); 
}); 
} 
//给单元格添加双击事件 
function addGridDbClickEvent(){ 
$("td.simpleInput").bind("dblclick",function(){ 
$('.simpleInput').each(function(){ 
$(this).removeClass("selectCell"); 
}); 
var val=$(this).html(); 
var width = $(this).css("width"); 
var height = $(this).css("height"); 
$(this).html("<input type='text' onblur='EdTable.saveEdit(this)' style='width:"+ width +";height:"+ height +"; padding:0px; margin:0px;' value='"+val+"' >"); 
$(this).children("input").select(); 
}); 
} 
// 给单元格添加键盘事件 
function addGridKeyPressEvent(){ 
$(document).keyup(function(event){ 
if(event.keyCode == 37){ 
// 左箭头 
var selectCell = $(".selectCell").prev()[0]; 
if(selectCell != undefined){ 
$(".selectCell").removeClass("selectCell").prev().addClass("selectCell"); 
} 
} else if(event.keyCode == 38){ 
// 上箭头 
var col = $(".selectCell").prevAll().length; 
var topCell = $(".selectCell").parent("tr").prev().children()[col]; 
if(topCell != undefined){ 
$(".selectCell").removeClass("selectCell"); 
$(topCell).addClass("selectCell"); 
} 
} else if(event.keyCode == 39){ 
// 右箭头 
var selectCell = $(".selectCell").next()[0]; 
if(selectCell != undefined){ 
$(".selectCell").removeClass("selectCell").next().addClass("selectCell"); 
} 
} else if(event.keyCode == 40){ 
// 下箭头 
var col = $(".selectCell").prevAll().length; 
var topCell = $(".selectCell").parent("tr").next().children()[col]; 
if(topCell != undefined){ 
$(".selectCell").removeClass("selectCell"); 
$(topCell).addClass("selectCell"); 
} 
} else if(event.keyCode == 13){ 
// 回车键 
var selectCell = $(".selectCell")[0]; 
if(selectCell != undefined){ 
$(selectCell).dblclick(); 
} 
} 
}); 
} 
// 单元格失去焦点后保存表格信息 
function saveEdit(gridCell){ 
var pnt=$(gridCell).parent(); 
$(pnt).html($(gridCell).attr("value")); 
$(gridCell).remove(); 
} 
return{ 
initBindGridEvent : initBindGridEvent, 
saveEdit : saveEdit 
} 
}();

源代码下载
EditableTable.rar
Javascript 相关文章推荐
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
Feb 27 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
Sep 22 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
js实现界面向原生界面发消息并跳转功能
Nov 22 Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
Three.js中网格对象MESH的属性与方法详解
Sep 27 Javascript
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
Sep 07 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
Oct 08 Javascript
antd table按表格里的日期去排序操作
Nov 17 Javascript
jQuery使用数组编写图片无缝向左滚动
Dec 11 #Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
Dec 10 #Javascript
ajax不执行success回调而是执行了error回调
Dec 10 #Javascript
解决js正则匹配换行问题实现代码
Dec 10 #Javascript
解决jquery异步按一定的时间间隔刷新问题
Dec 10 #Javascript
怎样在JavaScript里写一个swing把数据插入数据库
Dec 10 #Javascript
js里怎么取select标签里的值并修改
Dec 10 #Javascript
You might like
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
vue组件name的作用小结
2018/05/23 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
Python的print用法示例
2014/02/11 Python
详解Django中的权限和组以及消息
2015/07/23 Python
基于hashlib模块--加密(详解)
2017/06/21 Python
python实现屏保计时器的示例代码
2018/08/08 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Python绘图实现显示中文
2019/12/04 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
干部行政关系介绍信
2014/01/17 职场文书
小学教师办公室制度
2014/02/03 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL