使用javasprict实现功能
:添加学生 ,全选,反选,删除
求代码。
1条回答 默认 最新
菜鸟咸鱼一锅端 2020-06-19 16:53关注<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>动态生成表格</title> <style> table{margin-top:20px;width:800px;border:1px solid #ddd;border-collapse:collapse;} td,th{border:1px solid #ddd;padding:5px 10px;} td{padding:0;height:30px;} td input{width:100%;border:none;background-color:#ffc;} </style> <script> window.onload = function(){ /* 动态生成可编辑表格 1)生成表格 1>序号 1-n 2>数据 根据输入值确定数据 3>删除 显示删除按钮 2)表格编辑 1>点击td时,生成一个输入框 2>把td的内容赋值给输入框 3>把输入框添加到td 3)保存编辑 把输入框的值写入td */ // 获取页面元素 var banji = document.getElementById('banji'); var name = document.getElementById('name'); var sex = document.getElementById('sex'); var age = document.getElementById('age'); var btnSave = document.getElementById('btnSave'); var tableList = document.getElementById('tableList'); var tbody = tableList.children[1]; var all = document.getElementById('all'); var fx = document.getElementById('fx'); // 序号 var index=1; var hobby = '' // 1)生成表格 // 点击保存按钮生成表格 btnSave.onclick = function(){ // 生成一行 var tr = document.createElement('tr'); tr.innerHTML = '<td><input type="checkbox" name="hobby"></td>'+'<td>' + index++ + '</td><td>' + banji.value + '</td><td>' + name.value + '</td><td>' + sex.value + '</td><td>' + age.value + '</td><td><button class="btnDel">删除</td>'; // 往表格里添加行 tbody.appendChild(tr); hobby = document.getElementsByName('hobby'); /*// 删除操作 // 获取删除按钮 var btnDel = document.getElementsByClassName('btnDel'); // 绑定点击事件,移除tr for(var i=0;i<btnDel.length;i++){ btnDel[i].onclick = function(){ tbody.removeChild(this.parentNode.parentNode); } }*/ } // 事件委托:利用事件冒泡原理 // 把本来绑定到删除按钮的事件委托给它的父级去处理 // 目的:减少事件绑定数量,提高页面性能 tbody.onclick = function(e){ e = e || window.event; var _target = e.target || e.srcElement; var tagName = _target.tagName.toLowerCase(); // 判断是否点击了删除按钮 // 事件源对象:触发事件的元素 // toLowerCase()/toUpperCase():把字符转换成小写/大写 if(tagName === 'button'){ tbody.removeChild(_target.parentNode.parentNode); } // 编辑表格 // 1>点击td时,生成一个输入框 else if(tagName === 'td'){ // 第一个和最有一个td不可编辑 if(_target === _target.parentNode.firstElementChild || _target === _target.parentNode.lastElementChild){ return; } var input = document.createElement('input'); // 2>把td的内容赋值给输入框 input.value = _target.innerHTML; // 3>把输入框添加到td _target.innerHTML = ''; _target.appendChild(input); // 自动获得焦点 input.focus(); // 3)保存编辑 // 输入框失去焦点时保存 input.onblur = function(){ _target.innerHTML = input.value; } } // 给每个hobby复选框绑定点击事件 // 判定#all复选框的勾选状态 for(var i=0;i<hobby.length;i++){ hobby[i].onclick = function(){ all.checked = isCheckAll(); } } } // 4)全选/不选 // 把所有hobby复选框的状态改成与#all一致 all.onclick = function(){ console.log('------') for(var i=0;i<hobby.length;i++){ hobby[i].checked = all.checked; } } // 5)反选 // 把所有hobby的勾选状态取反 fx.onclick = function(){ console.log('====') for(var i=0;i<hobby.length;i++){ hobby[i].checked = !hobby[i].checked; } all.checked = isCheckAll(); } // 封装#all勾选状态函数 // * 如果所有的hobby勾选,则#all勾选 // * 只有有一个hobby未勾选,则#all取消勾选 function isCheckAll(){ // 假设hobby全部勾选 var res = true; for(var i=0;i<hobby.length;i++){ if(!hobby[i].checked){ res = false; break; } } return res; } } </script> </head> <body> <label for="banji">班级</label> <input type="text" id="banji" name="banji"> <label for="name">姓名</label> <input type="text" id="name" name="name"> <label for="sex">性别</label> <input type="text" id="sex" name="sex"> <label for="age">年龄</label> <input type="number" id="age" name="age"> <button id="btnSave">保存</button> <div class="list"> <div> </div> <table id="tableList"> <thead> <th><input type="checkbox" name="all" id="all">全选</th> <th><input type="checkbox" name="fx" id="fx">反选</th> <tr> <th width="40"></th> <th width="40">编号</th> <th width="40">班级</th> <th width="160">姓名</th> <th width="60">性别</th> <th width="160">年龄</th> <th width="60">操作</th> </tr> </thead> <tbody></tbody></table> </body> </html>解决 无用评论 打赏 举报