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 相关文章推荐
jquery实现div拖拽宽度示例代码
Jul 31 Javascript
jquery制作居中遮罩层效果分享
Feb 21 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
jQuery自动添加表单项的方法
Jul 13 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
Aug 24 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
vue+webpack模拟后台数据的示例代码
Jul 26 Javascript
JavaScript实现连连看连线算法
Jan 05 Javascript
JavaScript forEach中return失效问题解决方案
Jun 01 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执行速度全攻略(下)
2006/10/09 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
Python函数的周期性执行实现方法
2016/08/13 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
python 实现生成均匀分布的点
2019/12/05 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
采购人员的个人自我评价
2014/01/16 职场文书
会计学自我鉴定
2014/02/06 职场文书
大学生军训感想
2014/02/16 职场文书
亚运会口号
2014/06/20 职场文书
户籍证明格式
2014/09/15 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
Golang 结构体数据集合
2022/04/22 Golang