Js操作表格-对表格TR的添加/删除/拷贝

本文介绍如何使用JavaScript操作HTML表格,包括添加、删除和拷贝表格行(TR)。通过按钮触发事件,实现对表格数据的动态管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!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=gb2312" />
 <title>Js操作表格-对表格TR的添加/删除/拷贝</title>
 <style>
 body { margin:0; padding:0; font-size:12px;}
 table, td{ border-collapse:collapse; border:1px solid #ccc;}
 td{ padding:10px;}
 </style>
 </head>
 
 <body>
 <input type="button" id="Refresh" value="刷新页面" />
 <input type="button" id="Insert_row" value="添加TR" />
 <input type="button" id="delRow" value="删除选择" />
 <input type="button" id="copyRow" value="拷贝选择" />
 
 <table id="myTable">
     <tr>
         <td><input type="checkbox" name="checkbox" /></td>
         <td>11</td>
         <td>11</td>
     </tr>
     <tr>
         <td><input type="checkbox" name="checkbox" /></td>
         <td>22</td>
         <td>22</td>
     </tr>
     <tr>
         <td><input type="checkbox" name="checkbox" /></td>
         <td>33</td>
         <td>33</td>
     </tr>
     <tr>
         <td><input type="checkbox" name="checkbox" /></td>
         <td>44</td>
         <td>44</td>
     </tr>
     <tr>
         <td><input type="checkbox" name="checkbox" /></td>
         <td>55</td>
         <td>55</td>
     </tr>
 </table>
 
 <script>
 var doc = document,
     myTable = doc.getElementById("myTable"),
     selectBox = myTable.getElementsByTagName("input");
     
 //复制tr
 doc.getElementById("copyRow").onclick = function(){
     for(var i=0; i<selectBox.length; i++){
         if(selectBox[i].checked){
             var newTr = myTable.rows[i].cloneNode(true);
             newTr.getElementsByTagName("input")[0].checked = false;
             myTable.appendChild(newTr);
         }
     }
 }
 
 //删除tr    
 doc.getElementById("delRow").onclick = function(){
     for(var i=selectBox.length-1; i>=0; i--){
         if(selectBox[i].checked){
             myTable.deleteRow(i);
         }
     }
 }
 
 //添加tr
 doc.getElementById("Insert_row").onclick = function(){
     var tr = doc.createElement("tr");
     for(var i=0; i<3; i++){
         var td = doc.createElement("td");
             txt = doc.createTextNode("新增");
         td.appendChild(txt);
         tr.appendChild(td);
         if(i==0){
             td.innerHTML = "<input type='checkbox' name='checkbox' />" 
         }
     }
     myTable.appendChild(tr);
 }
 
 //刷新页面
 doc.getElementById("Refresh").onclick = function(){
     location.reload();
 }
 </script>
 </body>
 </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>收费项目列表</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <link rel="stylesheet" href="https://www.layuicdn.com/layui-v2.6.8/css/layui.css"> <style> .x-nav { padding: 0 20px; position: relative; z-index: 99; border-bottom: 1px solid #e5e5e5; line-height: 60px; } .x-body { padding: 20px; } .layui-table td, .layui-table th { padding: 9px 15px; } .td-manage a { margin: 0 5px; } .dialog-mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 999; display: flex; justify-content: center; align-items: center; } .dialog-content { background: #fff; padding: 20px; border-radius: 5px; width: 800px; max-height: 90vh; overflow-y: auto; } .x-red { color: red; } </style> </head> <body> <div id="app"> <!-- 面包屑导航 --> <div class="x-nav"> <span class="layui-breadcrumb"> <a>首页</a> <a>收费管理</a> <a><cite>收费项目列表</cite></a> </span> <a class="layui-btn layui-btn-sm" style="float:right" href="javascript:location.replace(location.href)" @click="refresh"> <i class="layui-icon layui-icon-refresh"></i> 刷新 </a> </div> <div class="x-body"> <!-- 操作--> <div class="layui-row"> <a class="layui-btn" href="pro_add.html"> <i class="layui-icon layui-icon-add-1"></i> 添加收费项目 </a> </div> <!-- 数据表格(关键:确保v-for正确循环数组) --> <table class="layui-table"> <thead> <tr> <th>ID</th> <th>所属小区</th> <th>收费编号</th> <th>项目名称</th> <th>创建时间</th> </tr> </thead> <tbody> <!-- 修正:确保proList是数组,且v-for正确循环 --> <tr v-for="(item, index) in proList" :key="item.id"> <td>{{ item.id }}</td> <td>{{ item.x_id }}</td> <td>{{ item.m_count }}</td> <td>{{ item.m_name }}</td> <td>{{ item.create_Time }}</td> <td class="td-manage"> <a @click="editItem(index)" title="编辑"> <i class="layui-icon layui-icon-edit"></i> </a> <a @click="deleteItem(index)" title="删除"> <i class="layui-icon layui-icon-delete"></i> </a> </td> </tr> </tbody> </table> </div> <!-- 编辑弹框 --> <div v-if="dialogVisible" class="dialog-mask"> <div class="dialog-content"> <h3>{{ dialogTitle }}</h3> <form class="layui-form layui-form-pane"> <input type="hidden" v-model="formData.id"> <div class="layui-form-item"> <label class="layui-form-label"> <span class='x-red'>*</span>所属小区 </label> <div class="layui-input-block"> <input type="text" v-model="formData.x_id" placeholder="请输入所属小区编号" class="layui-input" lay-verify="required"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label"> <span class='x-red'>*</span>收费项目编号 </label> <div class="layui-input-block"> <input type="text" v-model="formData.m_count" placeholder="请输入项目编号" class="layui-input" lay-verify="required"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label"> <span class='x-red'>*</span>收费名称 </label> <div class="layui-input-block"> <input type="text" v-model="formData.m_name" placeholder="请输入项目名称" class="layui-input" lay-verify="required"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label"> <span class='x-red'>*</span>创建时间 </label> <div class="layui-input-inline"> <input class="layui-input" v-model="formData.create_Time" placeholder="创建时间" id="checkInDate" lay-verify="required"> </div> </div> <div class="layui-form-item"> <button class="layui-btn layui-btn-primary" type="button" @click="dialogVisible = false">取消</button> <button class="layui-btn" type="button" @click="submitForm">确定</button> </div> </form> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> <script src="https://www.layuicdn.com/layui-v2.6.8/layui.js"></script> <script> // 从localStorage获取数据(关键:确保返回数组且数据正确) function getproData() { const data = localStorage.getItem('proData'); // 若localStorage无数据,使用包含3条记录的示例数组 const defaultData = [ { id: '3', x_id: '1', m_count: 'A栋', m_name: '金华小区A栋', create_Time: '2019-12-13' }, { id: '2', x_id: '2', m_count: 'B栋', m_name: '金华小区B栋', create_Time: '2019-12-11' }, // 新增不同数据避免重复 { id: '1', x_id: '3', m_count: 'C栋', m_name: '金华小区C栋', create_Time: '2019-12-12' } // 新增不同数据 ]; // 解析localStorage数据,若解析失败(如数据格式错误)则使用默认数据 try { return data ? JSON.parse(data) : defaultData; } catch (error) { console.error('localStorage数据解析失败,使用默认数据', error); return defaultData; } } new Vue({ el: '#app', data: { // 初始化proList为getproData返回的数组(确保是数组) proList: getproData(), dialogVisible: false, dialogTitle: '编辑收费项目', currentIndex: -1, formData: { id: '', x_id: '', m_count: '', // 新增:确保表单能接收m_count字段 m_name: '', create_Time: '' } }, mounted() { this.initLayui(); // 调试:打印proList长度,确认是否加载多条数据 console.log('当前proList长度:', this.proList.length); }, methods: { initLayui() { layui.use(['form', 'laydate', 'layer'], () => { const form = layui.form; const laydate = layui.laydate; window.layer = layui.layer; form.render(); }); }, refresh() { // 刷新时重新加载数据(确保从localStorage获取最新数据) this.proList = getproData(); layer.msg('刷新成功', {icon: 1}); }, editItem(index) { this.dialogTitle = '编辑收费项目'; this.currentIndex = index; // 深拷贝当前项数据到表单(确保表单字段完整) this.formData = JSON.parse(JSON.stringify(this.proList[index])); this.dialogVisible = true; }, deleteItem(index) { const _this = this; layer.confirm('确定要删除这条记录吗?', function(){ _this.proList.splice(index, 1); // 存储时使用正确的键名(避免覆盖其他数据) localStorage.setItem('proData', JSON.stringify(_this.proList)); layer.msg('删除成功', {icon: 1}); // 刷新列表显示最新数据 _this.proList = [..._this.proList]; }); }, submitForm() { if (!this.validateForm()) return; // 替换数组中的指定项(确保数组更新触发视图重新渲染) this.proList.splice(this.currentIndex, 1, this.formData); // 存储到localStorage localStorage.setItem('proData', JSON.stringify(this.proList)); this.dialogVisible = false; layer.msg('编辑成功', {icon: 1}); // 强制更新列表(避免Vue未检测到数组变化) this.proList = [...this.proList]; }, validateForm() { if (!this.formData.x_id) { layer.msg('请输入所属小区', {icon: 5}); return false; } if (!this.formData.m_name) { layer.msg('项目名称不能为空', {icon: 5}); return false; } return true; }, } }); </script> </body> </html> 该代码的修改创建日期也不显示未日期选择器,给出更改后的代码
最新发布
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值