前端学习笔记之学生管理系统增删查改
* { margin: 0; padding: 0; } header, .main, .main_informationDisplay>div { padding: 20px; } header { background-color: rgb(53, 138, 136); color: #fff; letter-spacing: 5px; } .main { display: flex; } .main_menu:hover { cursor: pointer; } .main_informationDisplay { display: flex; flex-grow: 1; margin-left: 20px; } .main_informationDisplay>div { flex-grow: 1; border-width: 2px; border-style: solid; border-color: transparent; } table, th, td { border: 1px solid #ccc; } table { width: 100%; } .studentsList>caption { font: 1.17em bolder; } /* h2 样式 */ .main_menu { padding: 10px 20px; background-color: rgb(32, 82, 80); margin-bottom: 4px; color: rgb(53, 138, 136); } /* 效果 */ .menu_checked { background-color: rgb(53, 138, 136); color: #fff; } .main_informationDisplay_checked { border-color: #006363 !important; }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>student system 3.0</title> <link rel="stylesheet" href="./style.css"> </head> <body> <div class="container"> <header> <h1>学生管理系统</h1> </header> <div class="main"> <section> <h2 class="main_menu menu_checked">学生列表</h2> <h2 class="main_menu">新增学生</h2> <h2 class="main_menu">修改学生</h2> <h2 class="main_menu">查询学生</h2> </section> <div class="main_informationDisplay"> <div class="main_informationDisplay_checked"> <table class="studentsList"> <caption>学生列表</caption> <thead> <tr> <th>学号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>操作</th> </tr> </thead> <tbody></tbody> </table> <span id="tips"></span> </div> <div> <h3>新增学生</h3> <form action="#" id="addForm"> <div> <label for="addname">姓名</label> <input type="text" id="addname" class="name"> </div> <div> <label for="addage">年龄</label> <input type="text" id="addage" class="age"> </div> <div> <span>性别</span> <label for="addmale">男</label> <input type="radio" name="gender" id="addmale" value="男"> <label for="addfemale">女</label> <input type="radio" name="gender" id="addfemale" value="女"> </div> <input type="button" value="确认新增" id="addBtn"> </form> </div> <div> <h3>修改学生</h3> <form action="#" id="modifyForm"> <div> <label for="modifyname">姓名</label> <input type="text" id="modifyname" class="name"> </div> <div> <label for="modifyage">年龄</label> <input type="text" id="modifyage" class="age"> </div> <div> <span>性别</span> <label for="modifymale">男</label> <input type="radio" name="gender" id="modifymale" value="男"> <label for="modifyfemale">女</label> <input type="radio" name="gender" id="modifyfemale" value="女"> </div> <input type="button" value="确认修改" id="modifyBtn" disabled> </form> </div> <div> <h3>查询学生</h3> <form action="#" id="queryForm"> <select name="" id=""> <option value="name">姓名</option> <option value="age">年龄</option> <option value="gender">性别</option> </select> <input type="text" placeholder="查询内容"> <input type="button" value="搜索" id="queryBtn"> </form> </div> </div> </div> </div> <script src="./common.js"></script> </body> </html>
let studentsData = [ { id: 1, name: '汪印星', age: '24', gender: '男' }, { id: 2, name: '李寅峰', age: '22', gender: '男' }, { id: 3, name: '钟鑫茂', age: '22', gender: '女' }, { id: 4, name: '张胜江', age: '24', gender: '男' }, { id: 5, name: '徐阳', age: '25', gender: '男' }, { id: 6, name: '杨烨', age: '26', gender: '男' }, { id: 7, name: '杨恩', age: '25', gender: '女' }, { id: 8, name: '夏琪琦', age: '22', gender: '女' }, { id: 9, name: '罗雷', age: '26', gender: '男' }, { id: 10, name: '陈阳吉', age: '22', gender: '男' } ]; let lastId = studentsData[studentsData.length - 1].id; // ------------ 右侧 div 点击、input 点击 添加效果 let main_info_arr = document.querySelectorAll(".main_informationDisplay>div"); // 所有 div let h2_arr = document.querySelectorAll(".main>section>h2"); // 所有 h2 main_info_arr.forEach((item, index) => { item.onclick = function () { main_info_arr.forEach(item => item.classList.remove("main_informationDisplay_checked")); // 去掉所有 div 框 item.classList.add("main_informationDisplay_checked"); // 某一个 div 添加边框 h2_arr.forEach(item => item.classList.remove("menu_checked"));// 去掉所有 h2 样式 h2_arr[index].classList.add("menu_checked"); } }); // ------ h2 点击改变样式 h2_arr.forEach((item, index) => { item.addEventListener("click", () => { h2_arr.forEach(item => item.classList.remove("menu_checked")); item.classList.add("menu_checked"); main_info_arr.forEach(item => item.classList.remove("main_informationDisplay_checked")); main_info_arr[index].classList.add("main_informationDisplay_checked"); }); }); // --------------- 渲染学生数据 let tbody = document.querySelector(".studentsList>tbody"); function render(arr = studentsData) { tbody.innerHTML = arr.map(item => `<tr> <td>${item.id}</td> <td>${item.name}</td> <td>${item.age}</td> <td>${item.gender}</td> <td> <input type="button" value="修改" data-func="modify" data-index='${item.id}'> <input type="button" value="删除" data-func="delete" data-index='${item.id}'> </td> </tr>` ).join(""); } render(); // ------ 公用元素 let name, age, gender; let tips = document.getElementById("tips"); // -------------- 新增学生 let add_btn = document.getElementById("addBtn"); add_btn.onclick = function () { name = document.querySelector("#addForm .name"); age = document.querySelector("#addForm .age"); gender = document.getElementById("addForm").gender.value; if (name.value && age.value) { studentsData.push({ id: lastId + 1, name: name.value, age: age.value, gender: gender ? gender : "男" }); lastId++; render(); } name.value = ""; age.value = ""; } // -------------- 修改学生 从表格里点击 修改 let modify_btn = document.getElementById("modifyBtn"); // 右侧 确认修改 按钮 let student; tbody.onclick = function (event) { if (event.target.nodeName == "INPUT") { if (event.target.dataset.func == "modify") { // 点击修改 modify_btn.disabled = false; name = document.querySelector("#modifyForm .name"); age = document.querySelector("#modifyForm .age"); gender_Arr = document.querySelectorAll("#modifyForm [type='radio']"); [student] = studentsData.filter(item => item.id == event.target.dataset.index); // 获得需要修改的学生对象 name.value = student.name; age.value = student.age; student.gender == "男" ? gender_Arr[0].checked = true : gender_Arr[1].checked = true; } else if (event.target.dataset.func == "delete") { // 点击删除 studentsData.forEach((item, index) => { if (item.id == event.target.dataset.index) { let result = confirm("是否删除:" + item.name + "?"); result ? studentsData.splice(index, 1) : ""; } }); render(); } } } // ---------- 点击修改学生 modify_btn.onclick = function () { name = document.querySelector("#modifyForm .name").value; age = document.querySelector("#modifyForm .age").value; gender = document.getElementById("modifyForm").gender.value; for (let i = 0; i < studentsData.length; i++) { if (studentsData[i].id == student.id) { studentsData.splice(i, 1, { id: student.id, name, age, gender }); break; } } render(); } // -------- 查询学生 let query_btn = document.getElementById("queryBtn"); query_btn.onclick = function () { let type = document.querySelector("#queryForm>select").value; let content = document.querySelector("#queryForm [type='text']").value; let arr; if (content) { arr = studentsData.filter(item => item[type] == content); } arr.length ? tips.innerText = "" : tips.innerText = "无数据"; render(arr); } // ---------- 点击左侧 学生列表 刷新显示区域 let student_list = document.querySelector(".main>section>h2:first-child"); student_list.addEventListener("click", () => { render(); tips.innerText = ""; })