使html表格可编辑状态,js+Html实现表格可编辑操作

本文实例为大家分享了js+Html实现表格可编辑操作的具体代码,供大家参考,具体内容如下

功能描述:单击页面使单元格td变成可编辑状态,输入内容后,当单元格失去焦点时,保存输入的内容。

点击增加行,在table的末尾增加一行;点击删除行,删除table中最末尾的一行。

编辑表格数据

/**

* JS实现可编辑的表格

* 用法:EditTables(tb1,tb2,tb2,......);

**/

//设置多个表格可编辑

function EditTables(){

for(var i=0;i

SetTableCanEdit(arguments[i]);

}

}

//设置表格是可编辑的

function SetTableCanEdit(table){

for(var i=1; i

SetRowCanEdit(table.rows[i]);

}

}

function SetRowCanEdit(row){

for(var j=0;j

//如果当前单元格指定了编辑类型,则表示允许编辑

var editType = row.cells[j].getAttribute("EditType");

if(!editType){

//如果当前单元格没有指定,则查看当前列是否指定

editType = row.parentNode.rows[0].cells[j].getAttribute("EditType");

}

if(editType){

row.cells[j].onclick = function (){

EditCell(this);

}

}

}

}

//设置指定单元格可编辑

function EditCell(element, editType){

var editType = element.getAttribute("EditType");

if(!editType){

//如果当前单元格没有指定,则查看当前列是否指定

editType = element.parentNode.parentNode.rows[0].cells[element.cellIndex].getAttribute("EditType");

}

switch(editType){

case "TextBox":

CreateTextBox(element, element.innerHTML);

break;

case "DropDownList":

CreateDropDownList(element);

break;

default:

break;

}

}

//为单元格创建可编辑输入框

function CreateTextBox(element, value){

//检查编辑状态,如果已经是编辑状态,跳过

var editState = element.getAttribute("EditState");

if(editState != "true"){

//创建文本框

var textBox = document.createElement("INPUT");

textBox.type = "text";

textBox.className="EditCell_TextBox";

//设置文本框当前值

if(!value){

value = element.getAttribute("Value");

}

textBox.value = value;

//设置文本框的失去焦点事件

textBox.onblur = function (){

CancelEditCell(this.parentNode, this.value);

}

//向当前单元格添加文本框

ClearChild(element);

element.appendChild(textBox);

textBox.focus();

textBox.select();

//改变状态变量

element.setAttribute("EditState", "true");

element.parentNode.parentNode.setAttribute("CurrentRow", element.parentNode.rowIndex);

}

}

//为单元格创建选择框

function CreateDropDownList(element, value){

//检查编辑状态,如果已经是编辑状态,跳过

var editState = element.getAttribute("EditState");

if(editState != "true"){

//创建下接框

var downList = document.createElement("Select");

downList.className="EditCell_DropDownList";

//添加列表项

var items = element.getAttribute("DataItems");

if(!items){

items = element.parentNode.parentNode.rows[0].cells[element.cellIndex].getAttribute("DataItems");

}

if(items){

items = eval("[" + items + "]");

for(var i=0; i

var oOption = document.createElement("OPTION");

oOption.text = items[i].text;

oOption.value = items[i].value;

downList.options.add(oOption);

}

}

//设置列表当前值

if(!value){

value = element.getAttribute("Value");

}

downList.value = value;

//设置创建下接框的失去焦点事件

downList.onblur = function (){

CancelEditCell(this.parentNode, this.value, this.options[this.selectedIndex].text);

}

//向当前单元格添加创建下接框

ClearChild(element);

element.appendChild(downList);

downList.focus();

//记录状态的改变

element.setAttribute("EditState", "true");

element.parentNode.parentNode.setAttribute("LastEditRow", element.parentNode.rowIndex);

}

}

//取消单元格编辑状态

function CancelEditCell(element, value, text){

element.setAttribute("Value", value);

if(text){

element.innerHTML = text;

}else{

element.innerHTML = value;

}

element.setAttribute("EditState", "false");

//检查是否有公式计算

CheckExpression(element.parentNode);

}

//清空指定对象的所有字节点

function ClearChild(element){

element.innerHTML = "";

}

//添加行

function AddRow(table, index){

var lastRow = table.rows[table.rows.length-1];

var newRow = lastRow.cloneNode(true);

//计算新增加行的序号,需要引入jquery 的jar包

var startIndex = $.inArray(lastRow,table.rows);

var endIndex = table.rows;

table.tBodies[0].appendChild(newRow);

newRow.cells[0].innerHTML=endIndex-startIndex;

SetRowCanEdit(newRow);

return newRow;

}

//删除行

function DeleteRow(table, index){

for(var i=table.rows.length - 1; i>0;i--){

var chkOrder = table.rows[i].cells[0].firstChild;

if(chkOrder){

if(chkOrder.type = "CHECKBOX"){

if(chkOrder.checked){

//执行删除

table.deleteRow(i);

}

}

}

}

}

//提取表格的值,JSON格式

function GetTableData(table){

var tableData = new Array();

alert("行数:" + table.rows.length);

for(var i=1; i

tableData.push(GetRowData(tabProduct.rows[i]));

}

return tableData;

}

//提取指定行的数据,JSON格式

function GetRowData(row){

var rowData = {};

for(var j=0;j

name = row.parentNode.rows[0].cells[j].getAttribute("Name");

if(name){

var value = row.cells[j].getAttribute("Value");

if(!value){

value = row.cells[j].innerHTML;

}

rowData[name] = value;

}

}

//alert("ProductName:" + rowData.ProductName);

//或者这样:alert("ProductName:" + rowData["ProductName"]);

return rowData;

}

//检查当前数据行中需要运行的字段

function CheckExpression(row){

for(var j=0;j

expn = row.parentNode.rows[0].cells[j].getAttribute("Expression");

//如指定了公式则要求计算

if(expn){

var result = Expression(row,expn);

var format = row.parentNode.rows[0].cells[j].getAttribute("Format");

if(format){

//如指定了格式,进行字值格式化

row.cells[j].innerHTML = formatNumber(Expression(row,expn), format);

}else{

row.cells[j].innerHTML = Expression(row,expn);

}

}

}

}

//计算需要运算的字段

function Expression(row, expn){

var rowData = GetRowData(row);

//循环代值计算

for(var j=0;j

name = row.parentNode.rows[0].cells[j].getAttribute("Name");

if(name){

var reg = new RegExp(name, "i");

expn = expn.replace(reg, rowData[name].replace(/\,/g, ""));

}

}

return eval(expn);

}

///

/**

* 格式化数字显示方式

* 用法

* formatNumber(12345.999,'#,##0.00');

* formatNumber(12345.999,'#,##0.##');

* formatNumber(123,'000000');

* @param num

* @param pattern

*/

/* 以下是范例

formatNumber('','')=0

formatNumber(123456789012.129,null)=123456789012

formatNumber(null,null)=0

formatNumber(123456789012.129,'#,##0.00')=123,456,789,012.12

formatNumber(123456789012.129,'#,##0.##')=123,456,789,012.12

formatNumber(123456789012.129,'#0.00')=123,456,789,012.12

formatNumber(123456789012.129,'#0.##')=123,456,789,012.12

formatNumber(12.129,'0.00')=12.12

formatNumber(12.129,'0.##')=12.12

formatNumber(12,'00000')=00012

formatNumber(12,'#.##')=12

formatNumber(12,'#.00')=12.00

formatNumber(0,'#.##')=0

*/

function formatNumber(num,pattern){

var strarr = num?num.toString().split('.'):['0'];

var fmtarr = pattern?pattern.split('.'):[''];

var retstr='';

// 整数部分

var str = strarr[0];

var fmt = fmtarr[0];

var i = str.length-1;

var comma = false;

for(var f=fmt.length-1;f>=0;f--){

switch(fmt.substr(f,1)){

case '#':

if(i>=0 ) retstr = str.substr(i--,1) + retstr;

break;

case '0':

if(i>=0) retstr = str.substr(i--,1) + retstr;

else retstr = '0' + retstr;

break;

case ',':

comma = true;

retstr=','+retstr;

break;

}

}

if(i>=0){

if(comma){

var l = str.length;

for(;i>=0;i--){

retstr = str.substr(i,1) + retstr;

if(i>0 && ((l-i)%3)==0) retstr = ',' + retstr;

}

}

else retstr = str.substr(0,i+1) + retstr;

}

retstr = retstr+'.';

// 处理小数部分

str=strarr.length>1?strarr[1]:'';

fmt=fmtarr.length>1?fmtarr[1]:'';

i=0;

for(var f=0;f

switch(fmt.substr(f,1)){

case '#':

if(i

break;

case '0':

if(i

else retstr+='0';

break;

}

}

return retstr.replace(/^,+/,'').replace(/\.$/,'');

}

可编辑的表格

序号商品名称数量单价合计
1C000
2D000

var tabProduct = document.getElementById("tabProduct");

// 设置表格可编辑

// 可一次设置多个,例如:EditTables(tb1,tb2,tb2,......)

EditTables(tabProduct);

效果如下:

394290152e73da27c335794348eaef2e.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习为图片人物换装【python代码教程】

在观看本文之前,请答应我要善良。昨天预告了下,发现很多同学对这个模型都表示出兴趣,甚至有好多同学后台发来照片让我帮他们脱裤子。授人以鱼不如授人以渔,请这些同学好自为之~ 01效果演示 本文案例使用的是开源项目instagan&am…

java通过HTTPS协议POST提交接收JSON格式数据

文章目录一、客户端实现1. HttpsApiUtils 测试方法2. 返回报文监控二、服务端实现2.1. 配置SSL 实现HTTPS2.2. 添加post接口方法2.3. 服务端监控三、进阶测试3.1. 客户端发送对象3.2. 服务端监控3.3. 客户端解析返回报文一、客户端实现 声明:不用引入任何第三方jar…

2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(下)

4、工具和库 工具和库是数据科学家的基础。我参与了大量关于哪种工具最好的辩论,哪个框架会取代另一个,哪个库是经济计算的缩影等等。 但有一点共识--我们需要掌握该领域的最新工具,否则就有被淘汰的风险。 Python取代其他所有事物并将自己…

Elasticsearch7.15.2 出现 node validation exception 的问题处理

3个异常如下: [1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536][2]: memory locking requested for elasticsearch process but memory is not locked[3]: max virtual memory areas vm.max_map_count [6553…

最强NLP模型BERT可视化学习

2018年是自然语言处理(Natural Language Processing, NLP)领域的转折点,一系列深度学习模型在智能问答及情感分类等NLP任务中均取得了最先进的成果。近期,谷歌提出了BERT模型,在各种任务上表现卓越,有人称其…

一分钟看懂通信铁塔

戳蓝字“CSDN云计算”关注我们哦!作者 | 无线深海责编 | 阿秃说到铁塔,相信大家都很熟悉。我们走在路上,到处都可以看到它们。作为通信工程师来说,我们所说的铁塔,往往是特指那些专门用于通信用途的塔。现实生活中&…

html立体魔方图片制作,ppt怎么制作三维视图的魔方图 ppt制作三维魔方图详细教程...

很多用户在制作PPT展示图的时候,有时候需要制作三维立体的魔方图,制作步骤简单,不过还有很多的用户不清楚如何制作,那么下面小编就为大家分享PPT制作三维魔方图的详细步骤教程,不会制作的朋友可以参照下面的步骤教程多…

PMP考试技巧(必备)

(一) 关键词篇 第 1 章 引论 看到“驱动变革”——选项中找“将来状态” 看到“依赖关系”——选项中找“项目集管理” 看到“价值最大化”——选项中找“项目组合管理” 看到“可行性研究”——选项中找“商业论证” 第 2 章 项目运行环境 看到“…

IDE 插件新版本发布,开发效率 “biu” 起来了

近日,Cloud Toolkit正式推出了面向 IntelliJ 和 Eclipse 两个平台的新款插件,本文挑选了其中三个重大特性进行解读,点击文末官网跳转链接,可查看详细的版本说明。 本地应用一键部署到任何机器上IDE 内置的命令行终端文件上传到服…

爬取6271家死亡公司数据,看十年创业公司消亡史

戳蓝字“CSDN云计算”关注我们哦!作者 | 朱小五责编 | 阿秃前段时间老罗和王校长都成为自己的创业公司成了失信人,小五打算上IT桔子看看他们的公司。意外发现IT桔子出了个死亡公司库(https://www.itjuzi.com/deathCompany)&#x…

阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算

日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发。 此前,早在2018年9月的杭州云栖大会上,阿里巴巴就公布了这项开源计划。Ma…

html5链接教程,关于html a、html超链接基础教程

一、html a语法被链接内容html a超链接机关图同时锚文本_锚链接又被各人喻为超链接。Href值:网址,网址一定加上http://域名相对路径,如htef"/abc/",代表本站内锚文本target指标值以下:_blank -- 在新窗口中掀开链接 _pa…

阿里大规模数据中心性能分析

郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化。CCF 系统软件专委和软件工程专委的委员。曾主持国家自然科学基金面上项目、入选上海市浦江人才计划A类、获得 ACMSIGSOFT “杰出论文奖”。担任 ICSE18NIER、ASE18、…

推出云游戏解决方案后,腾讯在这场沙龙上还说了什么?

近日腾讯在京举办腾讯云媒体开放日,其中在云游戏专场,腾讯研究院研究员俞点和腾讯视频云业务总经理李郁韬分别进行了分享。俞点指出,腾讯从2016年开始便针对云游戏进行技术开发和积累,进入2019年后云游戏迎来爆发,谷歌…

一份关于机器学习端到端学习指南

人工智能、机器学习已经火了有一阵了,很多程序员也想换到这方向,目前有关于深度学习基础介绍的材料很多,但很难找到一篇简洁的文章提供实施机器学习项目端到端的指南,从头到尾整个过程的相关指南介绍。因此,个人在网上…

从NeurIPS 2018看AI发展路线!

去年9月份的时候,我发表过一份技术报告,阐述了我认为人工智能最重要的挑战,大概有以下四个方面: 可伸缩性(Scalability)计算或存储的成本不与神经元的数量成二次方或线性比例的神经网络; 持续…

2亿用户背后的Flutter应用框架Fish Redux

背景 在闲鱼深度使用 Flutter 开发过程中,我们遇到了业务代码耦合严重,代码可维护性糟糕,如入泥泞。对于闲鱼这样的负责业务场景,我们需要一个统一的应用框架来摆脱当下的开发困境,而这也是 Flutter 领域空缺的一块处…

打包上传web html,将webApp打包上传到App Store

将webApp打包上传到Appstore流程:先将html5写好的webApp通过html5编辑器Builder打包为ipa包,打包流程下图image发行为原生安装包后如图所示:image咋们发行的是iOS版本,所以最上面一栏选者iOS,支不支持iPad版本看自己需求&#xff…

国内首家!华为获5G核心网电信设备进网许可证;亚马逊或颠覆博通等芯片制造商?2020年5G总投资额达0.9万亿元……...

关注并标星星CSDN云计算 速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周两次,打卡即read更快、更全了解泛云圈精彩newsgo go goiPhone 12全系渲染图(图片来源网络&am…

老代码多=过度耦合=if else?阿里巴巴工程师这样捋直老代码

简介 在业务开发的过程中,往往存在平台代码和业务代码耦合严重难以分离、业务和业务之间代码交织缺少拆解的现象。平台和业务代码交织导致不易修改,不同业务的代码交织增加了不同负责团队之间的协同成本。因此不论从代码质量,还是从团队协作…