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 相关文章推荐
利用JS实现浏览器的title闪烁
Jul 08 Javascript
引用外部脚本时script标签关闭的写法
Jan 20 Javascript
AngularJS学习笔记之ng-options指令
Jun 16 Javascript
html5+javascript实现简单上传的注意细节
Apr 18 Javascript
JavaScript中数组去除重复的三种方法
Apr 22 Javascript
关于JavaScript和jQuery的类型判断详解
Oct 08 Javascript
js阻止冒泡和默认事件(默认行为)详解
Oct 20 Javascript
javascript作用域链与执行环境详解
Mar 25 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 Javascript
js利用iframe实现选项卡效果
Aug 09 Javascript
JQuery Ajax如何实现注册检测用户名
Sep 25 jQuery
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的explode和implode的使用说明
2011/07/17 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
python导入时小括号大作用
2017/01/10 Python
python中import reload __import__的区别详解
2017/10/16 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
tensorflow如何批量读取图片
2019/08/29 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
python如何代码集体右移
2020/07/20 Python
Python打印不合法的文件名
2020/07/31 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
动物学专业毕业生求职信
2013/10/11 职场文书
电子商务网站的创业计划书
2014/01/05 职场文书
创业计划书如何编写
2014/02/06 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
高中军训感想300字
2014/03/04 职场文书
入党积极分子个人总结
2015/03/02 职场文书