需求:1.添加数据(将填入的信息添加到表格中)
2.按照编号或者年龄排序
3.升序或者降序排序
4.移入移出隔行变色
5.全选
6.上移下移
7.删除
8.批量删除
HTML
<div class="box"> <p> <span>请输入名字:<input type="text" /></span> <span>请选择性别: <select> <option value="男">男</option> <option value="女">女</option> </select> </span> <span>请输入年龄:<input type="text" /></span> <input type="button" value="添加" id="add"/> </p> <p> 排序: <select> <option value="编号">编号</option> <option value="年龄">年龄</option> </select> <select> <option value="升序">升序</option> <option value="降序">降序</option> </select> <input type="button" value="排序" id="sort"/> </p> <p> 搜索: <input type="text" /> <input type="button" value="搜索" id="search"/> </p> <p> <input type="button" value="反选" id="fan"/> <input type="button" value="批量删除" id="many" /> </p> <table border="0" cellspacing="0" cellpadding="0"> <tr> <th> <label> 全选 <input type="checkbox" id="allBtn"/> </label> </th> <th>编号</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>操作</th> </tr> <tr> <td> <label> <input type="checkbox"/> </label> </td> <td>1</td> <td>LEO</td> <td>男</td> <td>36</td> <td> <input type="button" value="上移" /> <input type="button" value="下移" /> <input type="button" value="删除" /> </td> </tr> <tr> <td> <label> <input type="checkbox"/> </label> </td> <td>2</td> <td>MOMO</td> <td>男</td> <td>16</td> <td> <input type="button" value="上移" /> <input type="button" value="下移" /> <input type="button" value="删除" /> </td> </tr> <tr> <td> <label> <input type="checkbox"/> </label> </td> <td>3</td> <td>鹿晗</td> <td>男</td> <td>26</td> <td> <input type="button" value="上移" /> <input type="button" value="下移" /> <input type="button" value="删除" /> </td> </tr> <tr> <td> <label> <input type="checkbox"/> </label> </td> <td>4</td> <td>杨紫</td> <td>女</td> <td>25</td> <td> <input type="button" value="上移" /> <input type="button" value="下移" /> <input type="button" value="删除" /> </td> </tr> <tr> <td> <label> <input type="checkbox"/> </label> </td> <td>5</td> <td>张一山</td> <td>男</td> <td>26</td> <td> <input type="button" value="上移" /> <input type="button" value="下移" /> <input type="button" value="删除" /> </td> </tr> </table> </div>
CSS
*{ margin: 0; padding: 0; } .box{ 800px; margin: 30px auto 0; } .box input[type=text]{ 110px; padding-left: 10px; height: 20px; } .box p{ padding-bottom: 20px; } .box span{ margin-right: 10px; } .box table{ 100%; border: 1px solid #000; text-align: center; border-left: 0; } th,td{ height: 30px; border-left: 1px solid #000; } td{ border-top: 1px solid #000; } td label{ display: inline-block; 100%; height: 100%; } td>input{ float: left; margin-left:20px; }
JS
var oInput=document.getElementsByTagName("input"); var select1=document.getElementsByTagName("select"); var oTable=document.getElementsByTagName("table")[0]; var allBtn=document.getElementById("allBtn"); var searchBtn=document.getElementById("search"); var fanBtn=document.getElementById("fan"); var manyBtn=document.getElementById("many"); var tBody=oTable.tBodies[0]; var rows=tBody.rows; var len=rows.length; var oldColor=""; var num=0; //定义一个临时容器,存储需要排序行对象。 var trArr=[]; colorFn(); fn(); //添加 oInput[2].onclick=function(){ if(oInput[0].value != ""&&oInput[1].value != ""){ //添加行 var tr=document.createElement("tr"); var str1='<td><label><input type="checkbox"/></label></td><td>'+len+'</td><td>'+oInput[0].value+'</td><td>'+select1[0].value+'</td>'; var str2='<td>'+oInput[1].value+'</td><td><input type="button" value="上移" /><input type="button" value="下移" /><input type="button" value="删除" /></td>'; tr.innerHTML=str1+str2; tBody.appendChild(tr); //添加信息后行数发生变化,事件、隔行变色,排序数组都需重置 //再次获取行数 len=rows.length; colorFn(); fn(); sortFn(); moveFn(); } } //排序 sortFn(); function sortFn(){ //遍历原行集合,并将需要排序的行对象存储到临时容器中。 //i初始值等于1,去除标题行 for (var i=1;i<len;i++) { trArr[i-1]=rows[i]; } oInput[3].onclick=function(){ if(select1[1].value=="年龄"){ //数组按年龄排序 mySort(trArr,4); }else{ //数组按编号排序 mySort(trArr,1); } //添加行 addTr(); //重置隔行变色 colorFn(); } } function addTr(){ //升序 if(select1[2].value=="升序"){ for (var i=0;i<trArr.length;i++) { tBody.appendChild(trArr[i]); } }else{ //降序 for (var i=trArr.length-1;i>=0;i--) { tBody.appendChild(trArr[i]); } } } //排序函数 function mySort(arr,a){ for (var i=0;i<arr.length;i++) { for (var j=i+1;j<arr.length;j++){ //按照年龄数值排序,并转成整数。 if(parseInt(arr[i].cells[a].innerHTML)>parseInt(arr[j].cells[a].innerHTML)){ var temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } //搜索:当按名字、年龄、性别搜索到该行时,该行高亮 searchFn(); function searchFn(){ searchBtn.onclick=function(){ colorFn(); if(oInput[4].value==""){ alert("请输入要搜索的内容"); }else{ for (var i=1;i<len;i++) { for (var j=0;j<rows[i].cells.length;j++) { if(oInput[4].value==rows[i].cells[j].innerHTML){ rows[i].cells[j].parentNode.style.background="yellow"; } } } } } } //反选 fanFn(); function fanFn(){ fanBtn.onclick=function(){ var arr=[]; for (var i=1;i<len;i++) { var check=rows[i].cells[0].children[0].children[0]; check.checked=!check.checked; if(check.checked){ num++; //当选中该行时 rows[i].style.background="#B13937"; oldColor="#B13937"; }else if(!check.checked){ num--; //当取消选中该行时 if(rows[i].index%2==0){ oldColor="pink"; }else{ oldColor="#ccc"; } rows[i].style.background=oldColor; } } //当全部被选中后,全选按钮被选中,否则取消 if(num==len-1){ allBtn.checked=true; }else{ allBtn.checked=false; } } } //批量操作 manyBtn.onclick=function(){ for (var i=1;i<len;i++) { var check=rows[i].cells[0].children[0].children[0]; if(check.checked){ rows[i].style.display="none"; } } } //上移,下移 moveFn(); function moveFn(){ for (var i=1;i<len;i++) { var upBtn=rows[i].cells[5].children[0]; var downBtn=rows[i].cells[5].children[1]; var delBtn=rows[i].cells[5].children[2]; //上移 upBtn.onclick=function(){ //获得tBody var parent=this.parentNode.parentNode.parentNode; var pre=this.parentNode.parentNode.previousElementSibling; var elem=this.parentNode.parentNode; if(elem==tBody.rows[1]){ alert('到头了'); }else{ parent.insertBefore(elem,pre); } } //下移 downBtn.onclick=function(){ var parent=this.parentNode.parentNode.parentNode; var next=this.parentNode.parentNode.nextElementSibling; var elem=this.parentNode.parentNode; if(elem==tBody.lastElementChild){ alert('到尾了'); }else{ parent.insertBefore(elem,next.nextElementSibling); } } //删除 delBtn.onclick=function(){ var parent=this.parentNode.parentNode.parentNode; var elem=this.parentNode.parentNode; parent.removeChild(elem); len=rows.length; colorFn(); } } } //隔行变色 function colorFn(){ for (var i=1;i<len;i++) { //隔行变色 if(i%2==0){ rows[i].style.background="pink"; }else{ rows[i].style.background="#ccc"; } } } //事件函数 function fn(){ for (var i=1;i<len;i++) { //鼠标移入 rows[i].index=i; rows[i].onmouseover=function(){ //记录原先背景颜色值 oldColor=this.style.background; //改变背景颜色 this.style.background="#A4A4A4"; } //鼠标移出 rows[i].onmouseout=function(){ this.style.background=oldColor; } //点击选中 rows[i].cells[0].children[0].children[0].onclick=function(){ var Parent=this.parentNode.parentNode.parentNode; if(this.checked){ num++; //当选中该行时 Parent.style.background="#B13937"; oldColor="#B13937"; }else if(!this.checked){ num--; //当取消选中该行时 if(Parent.index%2==0){ oldColor="pink"; }else{ oldColor="#ccc"; } Parent.style.background=oldColor; } //当全部被选中后,全选按钮被选中,否则取消 if(num==len-1){ allBtn.checked=true; }else{ allBtn.checked=false; } } } } //点击全选 allBtn.onclick=function(){ //全部选中 if(this.checked){ num=5; for (var i=1;i<len;i++) { rows[i].children[0].children[0].children[0].checked=true; rows[i].style.background="#B13937"; } }else{ //全部取消 num=0; for (var i=1;i<len;i++) { rows[i].children[0].children[0].children[0].checked=false; } colorFn(); } }