200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > jQuery一步一步实现跨浏览器的可编辑表格 支持IE Firefox Safari

jQuery一步一步实现跨浏览器的可编辑表格 支持IE Firefox Safari

时间:2018-12-24 05:46:54

相关推荐

jQuery一步一步实现跨浏览器的可编辑表格 支持IE Firefox Safari

脚 本 之 家 脚本云专题素材下载电子书软件下载源码下载服务器常用软件a5交易 首页网页制作脚本专栏脚本下载网络编程数据库CMS教程电子书籍平面设计媒体动画操作系统网站运营网络安全 YUI.Ext相关prototypejquerydojojsonlib_jsjs面向对象extjsMootoolsSeajs其它 特色栏目: vbscript 正则表达式 javascript 批处理 服务器软件 素材下载 低价出售流量10000IP只需8元阿里云码上送福利【30元代金券】网站加速(加速乐)内部1折券【数量有限】装软件赚钱,每台电脑秒赚6.3元服务器租用/托管-域名空间/认准腾佑科技VeryCloud 专业cdn加速服务商微子网络 湛江双线高防 抗15G 700元起免费VPN秒进谷歌,3KVPN秒看youtube众生网络 基于云计算的互联网基础服务运营商双核10M独享云服务器特价98元/月BGP四线 亿恩1U服务器托管3999元/年九九数据 — 工信部认可正规资质IDC接入商枫信科技-江苏双线10M保证-399/元四核15M独享服务器特价188元/月免备vps20/百独799/双线350/45互联VeryCloud云主机,仅需29元,抢疯了!鼎点网络百兆独享服务器仅需999元免备案国内虚拟主机-163cdn畅游网络 百独服务器 包跑满 998元服务器租用 199/月起 页面导航: 首页 → 网络编程 → JavaScript → javascript类库 → jquery → 正文内容 jQuery 可编辑表格

jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera

作者: 字体:[增加 减小] 类型:转载 时间:-08-28 在修改数据时,有时候为了方便,我们希望能够直接在表格里面对数据进行直接修改。 要实现可编辑的表格功能,我们要解决以下问题:

1.明确要修改的数据在表格中是哪些列(如何找到这些单元格);

2.如何让单元格变成可以编辑的;

3.如何处理单元格的一些按键事件;

4.解决跨浏览器问题。

我们通过jQuery可以一步一步解决上述问题。

一、 绘制表格

首先我们先画好一个表格。

Code1:

复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>jQuery的跨浏览器可编辑表格</title>

<link rel="stylesheet" type="text/css" href="css/editTable.css" media="all"/>

<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>

<script type="text/javascript" src="js/editTable.js"></script>

</head>

<body>

<table>

<thead>

<tr>

<th colspan="2">鼠标点击表格就可以编辑</th>

</tr>

</thead>

<tbody>

<tr>

<th>学号</th>

<th>姓名</th>

</tr>

<tr>

<td>000001</td>

<td>张三</td>

</tr>

<tr>

<td>000002</td>

<td>李四</td>

</tr>

<tr>

<td>000003</td>

<td>王五</td>

</tr>

<tr>

<td>000004</td>

<td>赵六</td>

</tr>

</tbody>

</table>

</body>

</html>

画好表格以后显示的如图:

editTable01.jpg

很明显它看起来不像一个表格,既没有边框,而且很丑。那么我们先给这个表格设置一些样式。

Code2:

复制代码 代码如下:

body{}{

font-size: 14px;

}

table{}{

color: #4F6B72;

border: 1px solid #C1DAD7;

border-collapse: collapse;

width: 400px;

}

th{}{

width: 50%;

border: 1px solid #C1DAD7;

}

td{}{

width: 50%;

border: 1px solid #C1DAD7;

}

现在效果好多了:

editTable02.jpg

但是单元格和单元格之间还是有重叠的边框,只需要在标签选择符table中加上这样一个属性就能去除重复边框:

border-collapse: collapse;

复制代码 代码如下:

table{}{

color: #4F6B72;

border: 1px solid #C1DAD7;

border-collapse: collapse;

width: 400px;

}

editTable03.jpg

二、 让表格的单元格变成可编辑的列

绘制好表格以后,我们选取表格中的编号列作为可编辑的列。要让这一列的单元格能够被编辑,就需要在这些列中插入文本框,我们通过这一列单元格的onclick事件来插入文本框。

Code3:

复制代码 代码如下:

$(document).ready(function(){

//找到学号这一列的所有单元格

//因为学号这一列的单元格在所有td中的位置是偶数(0,2,4,6),所以通过even就可以筛选到td中偶数位的单元格

var numTd = $("tbody td:even");

//单击这些td时,创建文本框

numTd.click(function(){

//创建文本框对象

var inputobj = $("<input type='text'>");

//获取当前点击的单元格对象

var tdobj = $(this);

//去除文本框的border

inputobj.css("border","0");

//让文本框和单元格的宽度保持一致

inputobj.width(tdobj.width());

//让文本框的字体和单元格的字体大小一样

inputobj.css("font-size",tdobj.css("font-size"));

//让文本框和单元格的字体保持一致

inputobj.css("font-family",tdobj.css("font-family"));

//让文本框和单元格的背景保持一致

inputobj.css("background-color",tdobj.css("background-color"));

//appendTo方法把文本框添加到td中

inputobj.appendTo(tdobj);

});

});

现在已经把文本框插入到单元格中了。既然要编辑文本框,文本框就应该有值,文本框的值来源于单元格中的数据,并且我们要清空单元格中原有的数据。

Code4:

复制代码 代码如下:

$(document).ready(function(){

//找到学号这一列的所有单元格

//因为学号这一列的单元格在所有td中的位置是偶数(0,2,4,6),所以通过even就可以筛选到td中偶数位的单元格

var numTd = $("tbody td:even");

//单击这些td时,创建文本框

numTd.click(function(){

//创建文本框对象

var inputobj = $("<input type='text'>");

//获取当前点击的单元格对象

var tdobj = $(this);

//获取单元格中的文本

var text = tdobj.html();

//清空单元格的文本

tdobj.html("");

//去除文本框的border

inputobj.css("border","0");

//让文本框和单元格的宽度保持一致

inputobj.width(tdobj.width());

//让文本框的字体和单元格的字体大小一样

inputobj.css("font-size",tdobj.css("font-size"));

//让文本框和单元格的字体保持一致

inputobj.css("font-family",tdobj.css("font-family"));

//让文本框和单元格的背景保持一致

inputobj.css("background-color",tdobj.css("background-color"));

inputobj.css("color","#C75F3E");

//给文本框赋值

inputobj.val(text);

//appendTo方法把文本框添加到td中

inputobj.appendTo(tdobj);

});

});

但是以上代码看起来非常的繁琐,jQuery有一个非常好的优点,就是它的代码连缀。上面的代码可以通过连缀进行简化:

Code5:

复制代码 代码如下:

$(document).ready(function(){

//找到学号这一列的所有单元格

//因为学号这一列的单元格在所有td中的位置是偶数(0,2,4,6),所以通过even就可以筛选到td中偶数位的单元格

var numTd = $("tbody td:even");

//单击这些td时,创建文本框

numTd.click(function(){

//创建文本框对象

var inputobj = $("<input type='text'>");

//获取当前点击的单元格对象

var tdobj = $(this);

//获取单元格中的文本

var text = tdobj.html();

//清空单元格的文本

tdobj.html("");

inputobj.css("border","0")

.css("font-size",tdobj.css("font-size"))

.css("font-family",tdobj.css("font-family"))

.css("background-color",tdobj.css("background-color"))

.css("color","#C75F3E")

.width(tdobj.width())

.val(text)

.appendTo(tdobj);

});

});

现在表格中已经成功的插入了文本框,可以对单元格进行编辑了。

editTable04.jpg

但是有个明显的bug,当你再次点击同一个单元格时,会出现如下效果:

editTable05.jpg

是什么原因造成上面这个bug呢?因为在文本框中插入单元格之后,文本框是属于单元格的,我们点击文本框时,同样会触发单元格的click事件。

我们需要阻止文本框的点击行为(阻止事件冒泡)。

Code6:

复制代码 代码如下:

inputobj.click(function(){

return false;

});

但是点击单元格的边框时,还是会出现上述的bug,那我们做如下判断:如果单元格中已经插入了文本框,就跳出click事件。

Code7:

复制代码 代码如下:

$(document).ready(function(){

//找到学号这一列的所有单元格

//因为学号这一列的单元格在所有td中的位置是偶数(0,2,4,6),所以通过even就可以筛选到td中偶数位的单元格

var numTd = $("tbody td:even");

//单击这些td时,创建文本框

numTd.click(function(){

//创建文本框对象

var inputobj = $("<input type='text'>");

//获取当前点击的单元格对象

var tdobj = $(this);

//获取单元格中的文本

var text = tdobj.html();

//如果当前单元格中有文本框,就直接跳出方法

//注意:一定要在插入文本框前进行判断

if(tdobj.children("input").length>0){

return false;

}

//清空单元格的文本

tdobj.html("");

inputobj.css("border","0")

.css("font-size",tdobj.css("font-size"))

.css("font-family",tdobj.css("font-family"))

.css("background-color",tdobj.css("background-color"))

.css("color","#C75F3E")

.width(tdobj.width())

.val(text)

.appendTo(tdobj);

inputobj.get(0).select();

//阻止文本框的点击事件

inputobj.click(function(){

return false;

});

});

});

上面的bug解决了,但是我发现,点击单元格时,虽然从表面上看文字是变了色,但没有让我觉得它是能被编辑的。那么我就做一点点的改动,插入文本框的同时,选中文本框的文本。

Code 8:

复制代码 代码如下:

inputobj.get(0).select();

但是问题又来了,在Safari浏览器中,要让文本框处于选中状态,必须显得让文本框获得焦点。而我们这里只是在点击单元格时,插入文本框并给文本框赋值,文本框并没有获得焦点。解决的方法:通过jQuery的trigger方法来触发某个事件。

Code9:

复制代码 代码如下:

inputobj.trigger("focus").trigger("select");

三、文本框按键事件处理

以上的这些问题解决了,那我们就再来给文本框添加一些按键事件。我们知道不同的浏览器中获取按键的keyCode是不同的,但是jQuery帮我们解决了这个问题。

只需要在事件的function中加入event参数,然后在方法体中,通过event对象的which属性就能获得keyCode,event.which属性同化了不同浏览器获取keyCode的方法。

获得keyCode之后,我主要做两个按键事件:ESC键(键值:27)和Enter键(键值:13)。

Code10:

复制代码 代码如下:

//处理文本框上回车和esc按键的操作

//jQuery中某个事件方法的function可以定义一个event参数,jQuery会屏蔽浏览器的差异,传递给我们一个可用的event对象

inputobj.keyup(function(event){

//获取当前按键的键值

//jQuery的event对象上有一个which的属性可以获得键盘按键的键值

var keycode = event.which;

//处理回车的情况

if(keycode==13){

//获取当前文本框的内容

var inputtext = $(this).val();

//将td的内容修改成文本框中的内容

tdobj.html(inputtext);

}

//处理esc的情况

if(keycode == 27){

//将td中的内容还原成text

tdobj.html(text);

}

});

下面是完整的js代码:

Code11:

复制代码 代码如下:

$(document).ready(function(){

//找到学号这一列的所有单元格

//因为学号这一列的单元格在所有td中的位置是偶数(0,2,4,6),所以通过even就可以筛选到td中偶数位的单元格

var numTd = $("tbody td:even");

//单击这些td时,创建文本框

numTd.click(function(){

//创建文本框对象

var inputobj = $("<input type='text'>");

//获取当前点击的单元格对象

var tdobj = $(this);

//获取单元格中的文本

var text = tdobj.html();

//如果当前单元格中有文本框,就直接跳出方法

//注意:一定要在插入文本框前进行判断

if(tdobj.children("input").length>0){

return false;

}

//清空单元格的文本

tdobj.html("");

inputobj.css("border","0")

.css("font-size",tdobj.css("font-size"))

.css("font-family",tdobj.css("font-family"))

.css("background-color",tdobj.css("background-color"))

.css("color","#C75F3E")

.width(tdobj.width())

.val(text)

.appendTo(tdobj);

inputobj.get(0).select();

//阻止文本框的点击事件

inputobj.click(function(){

return false;

});

//处理文本框上回车和esc按键的操作

//jQuery中某个事件方法的function可以定义一个event参数,jQuery会屏蔽浏览器的差异,传递给我们一个可用的event对象

inputobj.keyup(function(event){

//获取当前按键的键值

//jQuery的event对象上有一个which的属性可以获得键盘按键的键值

var keycode = event.which;

//处理回车的情况

if(keycode==13){

//获取当前文本框的内容

var inputtext = $(this).val();

//将td的内容修改成文本框中的内容

tdobj.html(inputtext);

}

//处理esc的情况

if(keycode == 27){

//将td中的内容还原成text

tdobj.html(text);

}

});

});

});

相关文档打包下载

您可能感兴趣的文章:

在IE,Firefox,Safari,Chrome,Opera浏览器上调试 Menu控件在Google Chrome和Safari浏览器下显示错位的解决办法兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)safari,opera嵌入iframe页面cookie读取问题解决方法javascript实现阻止iOS APP中的链接打开Safari浏览器iOS 9 更新之Safari广告拦截器(Content Blocker)开发教程Tags:jQuery 可编辑 表格 复制链接收藏本文打印本文关闭本文返回首页 上一篇:JQuery 浮动导航栏实现代码 下一篇:基于jQuery Bar Indicator 插件实现进度条展示效果

相关文章

-09-09jQuery实现可展开合拢的手风琴面板菜单-09-09jquery中邮箱地址 URL网站地址正则验证实例代码-06-06jQuery数组处理方法汇总-10-10jquery数据验证插件(自制,简单,练手)实例代码-04-04jQuery为iframe的body添加click事件的实现代码-03-03jQuery each()小议-03-03jquery中实现标签切换效果的代码-03-03解决3.01版的jquery.form.js中文乱码问题的解决方法-06-06jQuery获取动态生成的元素示例-03-03浅谈EasyUI中编辑treegrid的方法

文章评论

评论(0人参与,0条评论) 搜狐“我来说两句”用户公约来说两句吧...发布微博登录 QQ登录 游客等级不够,发表评论升至指定级别才能获得该特权。详情请参见等级说明。 还没有评论,快来抢沙发吧! Powered by 畅言友情提醒:本站文件的解压密码: (请使用最新的winrar)
最 近 更 新
jquery进行数组遍历如何跳出当前的each循jQuery实现级联菜单效果(仿淘宝首页菜单动jQuery判断数组是否包含了指定的元素jQuery实现的经典竖向伸缩菜单效果代码jQuery实现带幻灯的tab滑动切换风格菜单代为jquery.ui.dialog 增加“在当前鼠标位置JQuery悬停控制图片轮播——代码简单jquery(hide方法)隐藏指定元素实例jquery导航制件jquery鼠标经过变色效果示jQuery拖拽div实现思路
热 点 排 行
1jquery JSON的解析方式2jquery $(document).ready() 与w3jquery加载页面的方法(页面加载完4jquery 将disabled的元素置为ena5jQuery.Autocomplete实现自动完成6JQuery中each()的使用方法说明7JQuery 绑定select标签的onchang812款经典的白富美型—jquery图片9jquery ajax提交表单数据的两种方10jquery 如何动态添加、删除class
Js与CSS工具
CSS在线压缩格式化(中文)css 格式化整理工具(英文)CSS整形格式化JavaScript 格式化整理工具jsbeautifier Js格式化整理工具(英文)php 格式化整理工具(英文)HTML/JS互相转换工具javascript pack加密压缩工具JS Minifier压缩JS混淆工具在线JS脚本校验器错误JavaScript 正则表达式在线测试工具
代码转换工具
Base64编码加密Escape加解密HTML/UBB代码转换GB2312/BIG5繁简字转换经典小工具集 数字转换HTML多功能代码转换器迅雷快车加/解密汉字转换拼音关于我们 - 广告合作 - 联系我们 - 免责声明 - 网站地图 - 投诉建议 - 在线投稿 CopyRight © - 脚本之家 , All Rights Reserved关闭 -关闭 - 站长统计 站长统计 站长统计

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。