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 相关文章推荐
javascript add event remove event
Apr 07 Javascript
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
javascript数据类型验证方法
Dec 31 Javascript
JavaScript 对象详细整理总结
Sep 29 Javascript
js获取时间函数及扩展函数的方法
Oct 30 Javascript
浅析Vue.js中v-bind v-model的使用和区别
Dec 04 Javascript
通过JavaScript下载文件到本地的方法(单文件)
Mar 17 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
浅谈vuex中store的命名空间
Nov 08 Javascript
JS ES6异步解决方案
Apr 29 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
str_replace只替换一次字符串的方法
2013/04/09 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
js闭包实例汇总
2014/11/09 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python中的异常处理简明介绍
2015/04/13 Python
Python对数据库操作
2016/03/28 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
静态变量和实例变量的区别
2015/07/07 面试题
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
网游商务专员求职信
2013/10/15 职场文书
幼儿师范毕业生自荐信
2013/11/09 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
考核评语大全
2014/04/29 职场文书
营销学习心得体会
2014/09/12 职场文书
人事专员岗位职责
2015/02/03 职场文书
三好学生个人总结
2015/02/15 职场文书
小学体育课教学反思
2016/02/16 职场文书
python单元测试之pytest的使用
2021/06/07 Python