数据驱动显示-表格的增删
Contents
通过数据变化引起显示相应改变
数据驱动显示:
HTML部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<div id="div1"> <label>用户名:</label> <input type="text" name="user" /><br /> <label>年 龄:</label> <input type="text" name="age" /><br /> <label>性 别:</label> <input type="radio" name="sex" value="男" checked /><label>男</label> <input type="radio" name="sex" value="女" /><label>女</label><br /> <label>电 话:</label> <input type="tel" name="tel" /><br /> <button>提交</button> </div> <table> <tr> <th><input type="checkbox" id="all" />全选</th> <th>用户名</th> <th>年龄</th> <th>性别</th> <th>电话</th> <th>删除</th> </tr> </table>
CSS部分
1 2 3 4 5 6 7 8 9 10
table { border-collapse: collapse; width: 1000px; } td,th { height: 30px; text-align: center; line-height: 30px; border: 1px solid #000000; }
JavaScript部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
//TODO数据驱动显示 var div1,table,inputs,btn,head,all; var list=[]; init(); function init(){ div1=document.querySelector("#div") inputs=Array.from(document.querySelector("#div1").querySelectorAll("input")); table=document.querySelector("table"); head=table.firstElementChild; btn=document.querySelector("button"); btn.addEventListener("click",addData); all=document.querySelector("#all"); all.addEventListener("click",allData); } function allData(e){ console.log(this); if(this===all){ list.forEach(function(item){ item.checked=all.checked; // console.log(this); // item.checked=this.checked; }) renderTable(); }else{ this.data.checked=this.checked; all.checked=list.every(function(item){ return item.checked; }) } } function addData(){ var obj=inputs.reduce(function(value,item){ if(item.name==="sex" && item.checked) value[item.name]=item.value // else value[item.name]=item.value; else if (item.name !== "sex") value[item.name] = item.value; if(item.name!=="sex") item.value=""; return value; },{checked:false}) obj["del"]=false; list.push(obj); renderTable(); } function renderTable(){ table.innerHTML=""; table.appendChild(head); for(var i=0;i<list.length;i++){ createTr(list[i]); } all.checked=list.every(function(item){ return item.checked; }) } function createTr(data){ var tr=document.createElement("tr"); for(var prop in data){ var td=document.createElement("td"); switch(prop){ case "checked": var ck=document.createElement("input"); ck.type="checkbox"; td.appendChild(ck); ck.data=data; ck.checked=data.checked; ck.addEventListener("click",allData) break; case "del": var del=document.createElement("button"); del.textContent="删除"; td.appendChild(del); del.data=data; del.addEventListener("click",delData); break default: td.textContent=data[prop]; } tr.appendChild(td); } table.appendChild(tr); } function delData(e){ var data=this.data; list=list.filter(function(item){ return item!==data; }) renderTable() }
Author Ankang
LastMod 2021-03-26