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 相关文章推荐
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
Mar 12 Javascript
Javascript 面向对象 对象(Object)
May 13 Javascript
获取dom元素那些讨厌的位置封装代码
Jun 23 Javascript
javascript检查表单数据是否改变的方法
Jul 30 Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
Jul 06 Javascript
jquery专业的导航菜单特效代码分享
Aug 29 Javascript
关于JavaScript 原型链的一点个人理解
Jul 31 Javascript
基于WebUploader的文件上传js插件
Aug 19 Javascript
详解JavaScript中的属性和特性
Dec 08 Javascript
js实现将json数组显示前台table中
Jan 10 Javascript
Vue组件模板及组件互相引用代码实例
Mar 11 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生成xml简单实例代码
2009/12/16 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
webpack 模块热替换原理
2018/04/09 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
javascript实现留言板功能
2020/02/08 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python设置检查点简单实现代码
2014/07/01 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
python如何操作mysql
2020/08/17 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
navabi英国:设计师大码女装
2019/06/25 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
护士岗前培训自我评鉴
2014/02/28 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android