使用javasprict实现功能
:添加学生 ,全选,反选,删除
求代码。
<!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>