js动态新增/删除table表的行和列

2024-04-20 00:58

本文主要是介绍js动态新增/删除table表的行和列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

亲测兼容谷歌,360,火狐,IE8
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>javascript删除行和列</title><script language="javascript" type="text/javascript">function findObj(theObj, theDoc) {var p, i, foundObj;if (!theDoc) theDoc = document;if ((p = theObj.indexOf("?")) > 0 && parent.frames.length) {theDoc = parent.frames[theObj.substring(p + 1)].document; theObj = theObj.substring(0, p);}if (!(foundObj = theDoc[theObj]) && theDoc.all)foundObj = theDoc.all[theObj]; for (i = 0; !foundObj && i < theDoc.forms.length; i++) foundObj = theDoc.forms[i][theObj]; for (i = 0; !foundObj &&
theDoc.layers && i < theDoc.layers.length; i++) foundObj = findObj(theObj, theDoc.layers[i].document);if (!foundObj && document.getElementById)foundObj = document.getElementById(theObj); return foundObj;}//添加一个列count = 1;function AddNewColumn() {var txtTDLastIndex = findObj("txtTDLastIndex", document);var columnID = parseInt(txtTDLastIndex.value);var tab = document.getElementById("tab");var rowLength = tab.rows.length;var columnLength = tab.rows[1].cells.length;for (var i = 0; i < rowLength; i++) {if (i == 0) {var oTd = tab.rows[0].insertCell(columnLength);oTd.innerHTML = "<div align='center' style='width:40px'><a href='javascript:' οnclick=\"DeleteSignColumn(" + (++columnID) + ")\">删除</a></div>";} else if (i == 1) {//第一列:序号var oTd = tab.rows[1].insertCell(columnLength);oTd.innerHTML = "<div style='background: #D3E6FE;width=100%;'>" + (++count) + "</div>";} else if (i > 1) {var oTd = tab.rows[i].insertCell(columnLength);oTd.id = "column" + columnID;oTd.innerHTML = "<textarea id=''  rows='4' style='width:150; height:40px;'></textarea>";}}}//添加一个行var index = 1;function AddNewRow() {var txtTRLastIndex = findObj("txtTRLastIndex", document);var rowID = parseInt(txtTRLastIndex.value);var tab = findObj("tab", document);var columnLength = tab.rows[0].cells.length;//添加行var newTR = tab.insertRow(tab.rows.length);newTR.id = "SignItem" + rowID;for (var i = 0; i < columnLength; i++) {if (i == 0) {//第一列:序号newTR.insertCell(0).innerHTML = ++index;} else if (i > 0 && i < 4) {newTR.insertCell(i).innerHTML = "<input id='textItem0' type='text' style='border: 0px' size='12' />";}else if (i >= 4) {newTR.insertCell(i).innerHTML = "<textarea id=''  rows='4' style='width:150; height:40px;'></textarea>";}}//添加列:删除按钮var lastTd = newTR.insertCell(columnLength);lastTd.innerHTML = "<div align='center' style='width:40px'><a href='javascript:' οnclick=\"DeleteSignRow('SignItem" + rowID + "')\">删除</a></div>";//将行号推进下一行txtTRLastIndex.value = (rowID + 1).toString();}//删除指定行function DeleteSignRow(rowid) {var tab = findObj("tab", document);var signItem = findObj(rowid, document);//获取将要删除的行的Indexvar rowIndex = signItem.rowIndex;//删除指定Index的行tab.deleteRow(rowIndex);//重新排列序号,如果没有序号,这一步省略for (i = 2; i < tab.rows.length; i++) {tab.rows[i].cells[0].innerHTML = i - 1;}--index}//删除指定列function DeleteSignColumn(columnId) {var tab = document.getElementById("tab");var columnLength = tab.rows[1].cells.length;//删除指定单元格 for (var i = 0; i < tab.rows.length; i++) {tab.rows[i].deleteCell(columnId);}//重新排列序号,如果没有序号,这一步省略var column = columnLength - 4;for (var j = 1; j < column; j++) {tab.rows[1].cells[j + 3].innerHTML = "<div style='background: #D3E6FE;width=100%;'>" + j + "</div>";}--count;}//清空列表function ClearAllSign() {//if (confirm('确定要清空所有吗?')) {index = 0;var tab = findObj("tab", document);var rowscount = tab.rows.length;//循环删除行,从最后一行往前删除for (i = rowscount - 1; i > 1; i--) {tab.deleteRow(i);}//重置最后行号为1var txtTRLastIndex = findObj("txtTRLastIndex", document);txtTRLastIndex.value = "1";//预添加一行AddNewRow();//}}</script>
<style>
table *{border:1px red solid;}
</style>
</head>
<body>
<div style="overflow: auto; height: 350px; width: 860px; padding: 10px;"><table cellpadding="1" id="tab" cellspacing="0" bordercolor="#A3C0E8" border="1"style="text-align: center"><tr id="tr1"><td></td><td></td><td></td><td></td><td></td></tr><tr id="trHeader"><td style="background: #D3E6FE">NO</td><td style="background: #D3E6FE">试验项目</td><td style="background: #D3E6FE">检验项目</td><td style="background: #D3E6FE">标准</td><td style="background: #D3E6FE">1</td></tr><tr><td>1</td><td><input id='textItem0' type='text' style="border: 0px" size='12' /></td><td><input id='checkItem0' type='text' style="border: 0px" size='12' /></td><td><input id='stand0' type='text' style="border: 0px" size='12' /></td><td><textarea rows="4" id="" style="width: 150px; height: 40px;"></textarea></td></tr></table><table cellpadding="1" cellspacing="0" bordercolor="#A3C0E8" border="1" style="text-align: center"><tr><td style="background: #D3E6FE"></td><td style="background: #D3E6FE"><input type="button" name="Submit" value="新增行" οnclick="AddNewRow()" /></td><td style="background: #D3E6FE"><input type="button" name="Submit" value="新增列" οnclick="AddNewColumn()" /></td><td style="background: #D3E6FE"><input type="button" name="Submit2" value="全部清空" οnclick="ClearAllSign()" /></td><td style="background: #D3E6FE"><input name='txtTRLastIndex' type='hidden' id='txtTRLastIndex' value="1" /><input name='txtTDLastIndex' type='hidden' id='txtTDLastIndex' value="4" /></td></tr></table></div>
</body>
</html>

效果图为:


结果为:


这篇关于js动态新增/删除table表的行和列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918898

相关文章

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU