赞
踩
可编辑表格在JavaScript中是比较经典的基础应用,涉及的知识内容就是最普遍的增删改查的设计思路。我在基础学习的过程中学学到的就是拿到你一个作业的时候,先分析需求,构思完结构代码之后再进行消详细的代码实现。
通过使用JavaScript,我们可以实现一个交互性强、用户友好的可编辑表格,使用户能够直接在表格中修改和更新数据,简化数据管理的过程。可编辑表格在数据输入、展示和编辑等方面具有广泛的应用。无论是构建一个在线表单、创建一个数据报表,还是设计一个动态的数据展示界面,掌握可编辑表格的概念和技术都是非常重要的。
在本篇博客中,我们将重点讨论使用JavaScript实现可编辑表格的基础知识和技术。我们将逐步介绍相关的概念,帮助您建立对可编辑表格的全面理解。首先,我们将了解如何使用JavaScript选取和操作表格元素。我们将学习如何通过DOM (Document Object Model)访问和修改表格的行、列、单元格,以及相关的属性和样式。接下来,我们将探讨如何实现表格的编辑功能。我们将学习如何捕获用户的输入事件,并将其应用到相应的表格单元格中。我在基础学习的过程中学学到的就是拿到你一个作业的时候,先分析需求,构思完结构代码之后再进行消详细的代码实现。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>风灵月影宗</title>
- <link rel="stylesheet" href="style.css" />
- </head>
- <body>
- <div id="errorAlter">
- <span>输错啦!请输入0到99999的值</span>
- </div>
- <div class="header">
- <h1>风灵月影</h1>
- </div>
- <div class="tableDiv">
- <table>
- <thead>
- <tr>
- <th>编号</th>
- <th>姓名</th>
- <th>生命力</th>
- <th>攻击力</th>
- <th>防御力</th>
- <th>耐力</th>
- <th>移速</th>
- <th>攻速</th>
- <th>操作</th>
- </tr>
- </thead>
- <tbody id="addNewTdArea">
- <tr>
- <td><span class="item2" title="胆敢向神伸出爪牙?">0</span></td>
- <td><span class="item2" title="胆敢向神伸出爪牙?">神</span></td>
- <td><span class="item2" title="胆敢向神伸出爪牙?">99999</span></td>
- <td><span class="item2" title="胆敢向神伸出爪牙?">99999</span></td>
- <td><span class="item2" title="胆敢向神伸出爪牙?">99999</span></td>
- <td><span class="item2" title="胆敢向神伸出爪牙?">99999</span></td>
- <td><span class="item2" title="胆敢向神伸出爪牙?">99999</span></td>
- <td><span class="item2" title="胆敢向神伸出爪牙?">99999</span></td>
- <td>————</td>
- <!--
- <td>0</td>
- <td>神</td>
- <td>99999</td>
- <td>99999</td>
- <td>99999</td>
- <td>99999</td>
- <td>99999</td>
- <td>99999</td>
- <td>————</td>
- -->
- </tr>
- <tr class="delPower">
- <td>114514</td>
- <td>李田所</td>
- <td name="upData">1919</td>
- <td name="upData">8</td>
- <td name="upData">10</td>
- <td name="upData">20</td>
- <td name="upData">33.5</td>
- <td name="upData">20</td>
- <td class="delTrBtn">踢出队伍</td>
- </tr>
- <tr class="delPower">
- <td>414</td>
- <td>丘比</td>
- <td name="upData">414</td>
- <td name="upData">414</td>
- <td name="upData">414</td>
- <td name="upData">414</td>
- <td name="upData">414</td>
- <td name="upData">414</td>
- <td class="delTrBtn">踢出队伍</td>
- </tr>
- </tbody>
- </table>
- </div>
- <div id="setNewform">
- <h3>招募角色</h3>
- <table>
- <thead>
- <tr>
- <th>编号</th>
- <th>姓名</th>
- <th>生命力</th>
- <th>攻击力</th>
- <th>防御力</th>
- <th>耐力</th>
- <th>移速</th>
- <th>攻速</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td class="inputContent"><input type="text" /></td>
- <td class="inputContent"><input type="text" /></td>
- <td class="inputContent"><input type="text" /></td>
- <td class="inputContent"><input type="text" /></td>
- <td class="inputContent"><input type="text" /></td>
- <td class="inputContent"><input type="text" /></td>
- <td class="inputContent"><input type="text" /></td>
- <td class="inputContent"><input type="text" /></td>
- </tr>
- </tbody>
- </table>
- </div>
- <input type="submit" value="确定招募" id="addTrBtn" />
- <div id="errorInputId">
- <h4>编号是不是有点问题捏?(1~999999的纯数字)</h4>
- </div>
- <div id="errorInputName">
- <h4>姓名是不是有点问题捏?(1到6位英文字符)</h4>
- </div>
- <div id="errorInputProperty">
- <h4>属性是不是有点问题捏?(1~999999的纯数字)</h4>
- </div>
- <div class="tips">
- <ul>
- <li>本表格仅仅实现部分数值的修改,数值在0到99999之间</li>
- <li>角色的添加和增加工作均开发完成</li>
- <li>json尚未包装</li>
- <li>后续开发工作有</li>
- <li>属性报错的时候指出是哪个属性报错</li>
- <li>在玩家设置编号的时候将编号设为唯一值,不可重复</li>
- <li>开放姓名的可编辑性</li>
- <li>更好的Css样式</li>
- </ul>
- </div>
- </body>
- <script src="script.js"></script>
- </html>
- * {
- margin: 0;
- padding: 0;
- }
- .header {
- margin: 70px auto;
- text-align: center;
- }
- .tableDiv {
- margin: 10px;
- }
- table {
- border-collapse: collapse;
- width: 100%;
- margin-bottom: 20px;
- }
- table th {
- background-color: #f2f2f2;
- border: 1px solid #ddd;
- padding: 10px;
- text-align: left;
- font-weight: bold;
- }
- table td {
- position: relative;
- border: 1px solid #ddd;
- padding: 10px;
- text-align: left;
- }
- /*
- table tr:nth-child(even) {
- background-color: #f2f2f2;
- }
- */
- table tr td:hover {
- background-color: #e6f7ff;
- }
- .tableDiv > table > tbody > tr > td > span {
- width: 90%;
- }
-
- .tableDiv > table > tbody > tr > td > input {
- width: 100%;
- height: 100%;
- border: 2px solid red;
- padding-left: 10px;
- box-sizing: border-box;
- position: absolute;
- top: 0;
- left: 0;
- font-size: 16px;
- }
- .tips {
- border: 1px solid gray;
- width: 500px;
- padding: 20px;
- margin: 20px 50px;
- }
- .tips ul li {
- margin: 5px;
- }
-
- /* newpart */
- /* 萌娘百科黑幕 究极修订版*/
- .item2 {
- color: transparent;
- background-color: black;
- transition: all 0.5s ease;
- padding: 5px;
- border-radius: 3px;
- position: relative;
- display: inline-block;
- z-index: 1;
- }
-
- .item2:before {
- content: "";
- display: block;
- width: 100%;
- height: 100%;
- position: absolute;
- top: 0;
- left: 0;
- z-index: -1;
- background-image: inherit;
- filter: blur(10px);
- transform: scale(1.2);
- opacity: 0;
- transition: opacity 0.5s ease;
- }
-
- .item2:hover:before {
- opacity: 1;
- }
-
- .item2:hover {
- color: white;
- }
-
- #setNewform {
- margin: 10px;
- }
-
- #setNewform > h3 {
- margin: 30px auto;
- text-align: center;
- }
- #setNewform > table > tbody > tr > td > input {
- width: 100%;
- height: 200%;
- padding-left: 10px;
- box-sizing: border-box;
- position: absolute;
- top: 0;
- left: 0;
- font-size: 20px;
- }
- input[type="submit"] {
- display: block;
- margin: 20px auto;
- margin-top: 40px;
- padding: 10px 20px;
- background-color: #4caf50;
- color: #fff;
- border: none;
- border-radius: 5px;
- font-size: 16px;
- cursor: pointer;
- }
-
- /* 用户修改报错 */
- #errorAlter {
- position: fixed;
- top: -100px;
- left: 0;
- width: 100%;
- background-color: #ffcc00;
- color: #333;
- font-size: 18px;
- text-align: center;
- padding: 10px 0;
- transition: top 0.3s ease-in-out;
- }
-
- #errorAlter.show {
- top: 0;
- }
-
- /* 用户输入太离谱报错 */
- #errorInputId {
- display: none;
- background-color: #ff9999;
- border: 2px solid #ff6666;
- color: #660000;
- padding: 10px;
- text-align: center;
- margin-top: 10px;
- animation: shake 0.3s ease-in-out;
- }
-
- #errorInputId h4 {
- font-size: 16px;
- font-weight: bold;
- margin: 0;
- }
- #errorInputName {
- display: none;
- background-color: #ff9999;
- border: 2px solid #ff6666;
- color: #660000;
- padding: 10px;
- text-align: center;
- margin-top: 10px;
- animation: shake 0.3s ease-in-out;
- }
-
- #errorInputName h4 {
- font-size: 16px;
- font-weight: bold;
- margin: 0;
- }
- #errorInputProperty {
- display: none;
- background-color: #ff9999;
- border: 2px solid #ff6666;
- color: #660000;
- padding: 10px;
- text-align: center;
- margin-top: 10px;
- animation: shake 0.3s ease-in-out;
- }
-
- #errorInputProperty h4 {
- font-size: 16px;
- font-weight: bold;
- margin: 0;
- }
- /* 小抖一下 */
- @keyframes shake {
- 0% {
- transform: translateX(0);
- }
- 10% {
- transform: translateX(-10px);
- }
- 20% {
- transform: translateX(10px);
- }
- 30% {
- transform: translateX(-10px);
- }
- 40% {
- transform: translateX(10px);
- }
- 50% {
- transform: translateX(-10px);
- }
- 60% {
- transform: translateX(10px);
- }
- 70% {
- transform: translateX(-10px);
- }
- 80% {
- transform: translateX(10px);
- }
- 90% {
- transform: translateX(-10px);
- }
- 100% {
- transform: translateX(0);
- }
- }
- //角色修改数值模块
-
- var upDatas = document.getElementsByName("upData");
-
- // 给角色的数值模块添加事件绑定
- function setTdCilck() {
- for (let i = 0; i < upDatas.length; i++) {
- upDatas[i].onclick = function () {
- updateTd(this);
- };
- }
- }
- setTdCilck();
-
- //报错提示 升级版
- const inputElement = document.getElementById("input-element");
- const errorContainer = document.getElementById("errorAlter");
- function showError() {
- errorContainer.classList.add("show");
- }
- function hideError() {
- errorContainer.classList.remove("show");
- }
-
- // 角色修改数值函数
- function updateTd(newContent) {
- if (document.getElementsByClassName("active-input").length == 0) {
- var oldhtml = newContent.innerHTML;
- newContent.innerHTML = "";
- var newInput = document.createElement("input");
- newInput.setAttribute("class", "active-input");
- newInput.value = oldhtml;
- const reg = /^[1-9][0-9]{0,4}$/;
- newInput.onblur = function () {
- if (reg.test(this.value)) {
- newContent.innerHTML = this.value;
- hideError();
- } else {
- showError();
- newContent.innerHTML = oldhtml;
- }
- };
- newContent.appendChild(newInput);
- } else {
- return;
- }
- }
-
-
- //添加新角色模块
-
- var trs = document.getElementsByTagName("tr"); //获取所有的tr元素
- var tds = document.querySelectorAll(".inputContent input"); // 获取所有的 input 元素
- var addNewTdArea = document.getElementById("addNewTdArea"); //获取tbody标签,以方便在它的后面添加子队员(tr)
- var addTrBtn = document.getElementById("addTrBtn"); //获取确定招募队友的btn
- var errorInputId = document.getElementById("errorInputId"); //获取编号报错的Div
- var errorInputName = document.getElementById("errorInputName"); //获取姓名报错的Div
- var errorInputProperty = document.getElementById("errorInputProperty"); //获取属性报错的Div
- //添加角色函数
- function addTr(tds) {
- //给招募队友按钮绑定事件
- addTrBtn.onclick = function () {
- var userInputValue = []; //定义空数组,用于保存用户输入的input里的值
- for (let i = 0; i < tds.length; i++) {
- userInputValue[i] = tds[i].value; // 获取 input 元素的值
- }
- //给用户输入的数据做验证,不要太离谱
- //编号部分 编号限定在1到999999之间的数字,可以重复。
- const idTest = /^[1-9][0-9]{0,5}$/;
- if (idTest.test(userInputValue[0])) {
- //编号通过!
- errorInputId.setAttribute("style", "display:none"); //隐藏编号报错
- //姓名部分 姓名限定在1到6位的英文字符,可以重复
- const nameTest = /^[a-zA-Z]{1,6}$/;
- if (nameTest.test(userInputValue[1])) {
- //姓名通过!
- errorInputName.setAttribute("style", "display:none"); //隐藏姓名报错
- //数值部分,因为最好不要套太多if 所以就一起验证了算了(,数值限定在1到99999的数字,可以重复
- const propertyTest = /^[1-9][0-9]{0,4}$/;
- let allValid = true; //定义allValid用于判断属性是否通过的循环验证
- for (let i = 2; i < userInputValue.length; i++) {
- if (!propertyTest.test(userInputValue[i])) {
- allValid = false; //allValid为false说明属性数组里有不符合规则的值
- break; //直接退出!!!!
- }
- }
- if (allValid) {
- //数值通过!
- errorInputProperty.setAttribute("style", "display:none"); //隐藏属性报错
- //创建标签用于插入tbody的下面
- const row = `<tr>
- <td>${userInputValue[0]}</td>
- <td>${userInputValue[1]}</td>
- <td name="upData">${userInputValue[2]}</td>
- <td name="upData">${userInputValue[3]}</td>
- <td name="upData">${userInputValue[4]}</td>
- <td name="upData">${userInputValue[5]}</td>
- <td name="upData">${userInputValue[6]}</td>
- <td name="upData">${userInputValue[7]}</td>
- <td class="delTrBtn1">踢出队伍</td>
- </tr>`;
- // 将新角色添加到队伍中
- var newRow = addNewTdArea.insertRow(); // 创建新行
- newRow.innerHTML = row;
-
- // 给新角色绑定修改功能
- setTdCilck();
-
- //给新角色绑定踢出功能
- var newDelTrBtn = newRow.querySelector(".delTrBtn1"); // 获取 "踢出队伍" 按钮
- newDelTrBtn.onclick = function () {
- // 给按钮添加点击事件监听器
- var confirmed = confirm("确定踢出这位角色吗?");
- if (confirmed) {
- // 如果用户点击了确定按 钮,则返回 alert("已踢出")
- addNewTdArea.deleteRow(newRow.rowIndex - 1); // 删除对应的行
- alert("已踢出");
- hideError();
- } else {
- // 如果用户点击了取消按钮,则返回 alert("这都不踢?")
- return alert("这都不踢?");
- }
- };
- //创建完角色后将用户输入置空 人性化设计
- for (var i = 0; i < tds.length; i++) {
- tds[i].value = "";
- }
- } else {
- errorInputProperty.setAttribute("style", "display:block"); //属性输入报错
- }
- } else {
- errorInputName.setAttribute("style", "display:block"); //姓名输入报错
- }
- } else {
- errorInputId.setAttribute("style", "display:block"); //编号输入报错
- }
- };
- }
- addTr(tds);
-
-
- //删除模块
-
- var trss = document.getElementsByClassName("delPower"); // 获取原始队伍里的两个角色的tr
- var delTrBtn = document.getElementsByClassName("delTrBtn"); //获取原始队伍里的两个角色的踢出队伍操作
- //给踢出队伍的tr绑定删除事件
- function setTrDel() {
- for (let i = 0; i < delTrBtn.length; i++) {
- delTrBtn[i].onclick = function () {
- delTr(i);
- };
- }
- }
- setTrDel();
- //删除函数本体
- function delTr(i) {
- // 使用 confirm 函数弹出提示框
- var confirmed = confirm("确定踢出这位角色吗?");
- if (confirmed) {
- trss[i].remove(); //直接踢出当前点击的角色(移除它的tr)
- alert("已踢出");
- hideError();
- } else {
- alert("这都不踢?");
- }
- //重新绑定(这个地方搞半天了)
- setTrDel();
- }
HTML与CSS代码作为基本网页结构代码就不做讲解。更多的重心应该在JS的实现上面。
角色修改数值模块
- var upDatas = document.getElementsByName("upData");
-
- // 给角色的数值模块添加事件绑定
- function setTdCilck() {
- for (let i = 0; i < upDatas.length; i++) {
- upDatas[i].onclick = function () {
- updateTd(this);
- };
- }
- }
- setTdCilck();
-
- //报错提示 升级版
- const inputElement = document.getElementById("input-element");
- const errorContainer = document.getElementById("errorAlter");
- function showError() {
- errorContainer.classList.add("show");
- }
- function hideError() {
- errorContainer.classList.remove("show");
- }
-
- // 角色修改数值函数
- function updateTd(newContent) {
- if (document.getElementsByClassName("active-input").length == 0) {
- var oldhtml = newContent.innerHTML;
- newContent.innerHTML = "";
- var newInput = document.createElement("input");
- newInput.setAttribute("class", "active-input");
- newInput.value = oldhtml;
- const reg = /^[1-9][0-9]{0,4}$/;
- newInput.onblur = function () {
- if (reg.test(this.value)) {
- newContent.innerHTML = this.value;
- hideError();
- } else {
- showError();
- newContent.innerHTML = oldhtml;
- }
- };
- newContent.appendChild(newInput);
- } else {
- return;
- }
- }
在这段代码中,我们首先通过document.getElementsByName("upData")
获取了所有具有name
属性为"upData"的元素,这些元素对应可编辑的表格单元格。接着,我们使用setTdCilck()
函数给这些表格单元格添加了点击事件监听器。也就是绑定点击修改事件
在点击事件处理函数updateTd()
中,我们首先检查是否已经有其他表格单元格正在编辑状态,如果是,则直接返回,避免重复编辑。然后,我们获取被点击的表格单元格的内容,并将其替换为空。接下来,创建一个input
元素,并设置其class
为"active-input",将之前的表格单元格内容赋值给input
的value
属性。然后,我们定义了一个正则表达式reg
用于验证用户输入的数值是否符合规定格式。在input
的blur
事件中,我们进行数值的验证,如果通过验证,则将用户输入的数值赋值给表格单元格,并隐藏错误提示;如果验证不通过,则显示错误提示,并恢复表格单元格原本的内容。通过以上的代码,我们实现了在可编辑表格中修改数值的功能,并对用户输入进行了简单的格式验证和错误提示。
接下来,我们将继续探讨其他功能模块,如添加新角色和删除角色模块,以完善我们的可编辑表格应用程序。
- //添加新角色模块
-
- var trs = document.getElementsByTagName("tr"); //获取所有的tr元素
- var tds = document.querySelectorAll(".inputContent input"); // 获取所有的 input 元素
- var addNewTdArea = document.getElementById("addNewTdArea"); //获取tbody标签,以方便在它的后面添加子队员(tr)
- var addTrBtn = document.getElementById("addTrBtn"); //获取确定招募队友的btn
- var errorInputId = document.getElementById("errorInputId"); //获取编号报错的Div
- var errorInputName = document.getElementById("errorInputName"); //获取姓名报错的Div
- var errorInputProperty = document.getElementById("errorInputProperty"); //获取属性报错的Div
- //添加角色函数
- function addTr(tds) {
- //给招募队友按钮绑定事件
- addTrBtn.onclick = function () {
- var userInputValue = []; //定义空数组,用于保存用户输入的input里的值
- for (let i = 0; i < tds.length; i++) {
- userInputValue[i] = tds[i].value; // 获取 input 元素的值
- }
- //给用户输入的数据做验证,不要太离谱
- //编号部分 编号限定在1到999999之间的数字,可以重复。
- const idTest = /^[1-9][0-9]{0,5}$/;
- if (idTest.test(userInputValue[0])) {
- //编号通过!
- errorInputId.setAttribute("style", "display:none"); //隐藏编号报错
- //姓名部分 姓名限定在1到6位的英文字符,可以重复
- const nameTest = /^[a-zA-Z]{1,6}$/;
- if (nameTest.test(userInputValue[1])) {
- //姓名通过!
- errorInputName.setAttribute("style", "display:none"); //隐藏姓名报错
- //数值部分,因为最好不要套太多if 所以就一起验证了算了(,数值限定在1到99999的数字,可以重复
- const propertyTest = /^[1-9][0-9]{0,4}$/;
- let allValid = true; //定义allValid用于判断属性是否通过的循环验证
- for (let i = 2; i < userInputValue.length; i++) {
- if (!propertyTest.test(userInputValue[i])) {
- allValid = false; //allValid为false说明属性数组里有不符合规则的值
- break; //直接退出!!!!
- }
- }
- if (allValid) {
- //数值通过!
- errorInputProperty.setAttribute("style", "display:none"); //隐藏属性报错
- //创建标签用于插入tbody的下面
- const row = `<tr>
- <td>${userInputValue[0]}</td>
- <td>${userInputValue[1]}</td>
- <td name="upData">${userInputValue[2]}</td>
- <td name="upData">${userInputValue[3]}</td>
- <td name="upData">${userInputValue[4]}</td>
- <td name="upData">${userInputValue[5]}</td>
- <td name="upData">${userInputValue[6]}</td>
- <td name="upData">${userInputValue[7]}</td>
- <td class="delTrBtn1">踢出队伍</td>
- </tr>`;
- // 将新角色添加到队伍中
- var newRow = addNewTdArea.insertRow(); // 创建新行
- newRow.innerHTML = row;
-
- // 给新角色绑定修改功能
- setTdCilck();
-
- //给新角色绑定踢出功能
- var newDelTrBtn = newRow.querySelector(".delTrBtn1"); // 获取 "踢出队伍" 按钮
- newDelTrBtn.onclick = function () {
- // 给按钮添加点击事件监听器
- var confirmed = confirm("确定踢出这位角色吗?");
- if (confirmed) {
- // 如果用户点击了确定按 钮,则返回 alert("已踢出")
- addNewTdArea.deleteRow(newRow.rowIndex - 1); // 删除对应的行
- alert("已踢出");
- hideError();
- } else {
- // 如果用户点击了取消按钮,则返回 alert("这都不踢?")
- return alert("这都不踢?");
- }
- };
- //创建完角色后将用户输入置空 人性化设计
- for (var i = 0; i < tds.length; i++) {
- tds[i].value = "";
- }
- } else {
- errorInputProperty.setAttribute("style", "display:block"); //属性输入报错
- }
- } else {
- errorInputName.setAttribute("style", "display:block"); //姓名输入报错
- }
- } else {
- errorInputId.setAttribute("style", "display:block"); //编号输入报错
- }
- };
- }
- addTr(tds);
添加角色模块的实现。这个模块允许用户输入角色的信息,并将其添加到表格中。
代码中的addTr
函数是添加角色的核心函数。它通过监听"招募队友"按钮的点击事件来触发角色添加操作。当按钮被点击时,该函数会执行以下步骤:
userInputValue
数组中。通过这个添加角色模块,用户可以逐步输入角色的编号、姓名和属性值,系统会根据输入的数据动态创建表格行,并为每个角色提供修改和删除功能。这样用户就可以方便地管理角色数据。
- var trss = document.getElementsByClassName("delPower"); // 获取原始队伍里的两个角色的tr
- var delTrBtn = document.getElementsByClassName("delTrBtn"); //获取原始队伍里的两个角色的踢出队伍操作
- //给踢出队伍的tr绑定删除事件
- function setTrDel() {
- for (let i = 0; i < delTrBtn.length; i++) {
- delTrBtn[i].onclick = function () {
- delTr(i);
- };
- }
- }
- setTrDel();
- //删除函数本体
- function delTr(i) {
- // 使用 confirm 函数弹出提示框
- var confirmed = confirm("确定踢出这位角色吗?");
- if (confirmed) {
- trss[i].remove(); //直接踢出当前点击的角色(移除它的tr)
- alert("已踢出");
- hideError();
- } else {
- alert("这都不踢?");
- }
- //重新绑定(这个地方搞半天了)
- setTrDel();
- }
代码中通过document.getElementsByClassName
获取了原始队伍中的角色行和踢出队伍操作按钮的元素集合。接下来,定义了setTrDel
函数用于绑定删除事件。setTrDel
函数通过遍历delTrBtn
元素集合,为每个踢出按钮绑定点击事件。当按钮被点击时,会调用delTr
函数,并将相应的角色行的索引作为参数传递给它。
delTr
函数是删除操作的核心函数。它执行以下操作:
confirm
函数弹出确认对话框,询问用户是否确定删除该角色。remove()
方法)。hideError
函数,隐藏可能存在的错误提示信息。通过这个删除模块,用户可以选择要删除的角色,并在确认后将其从表格中移除。这样用户可以方便地管理队伍中的角色。
在本博客中,我们学习了基于Web技术的可编辑表格应用。通过使用JavaScript、HTML和CSS,我们成功实现了角色修改数值、添加新角色和删除角色的功能。
通过角色修改数值模块,用户可以点击数值单元格,将其转换为可编辑状态,并更新数值。我们还加入了输入验证功能,确保用户输入的数值符合规定的范围。
添加新角色模块允许用户输入角色的编号、姓名和数值,并将其添加到表格中。我们对用户输入进行了验证,以确保数据的准确性和合法性。
删除模块允许用户从表格中踢出不需要的角色。用户可以点击相应的删除按钮,并在确认后将角色从表格中移除。
通过这个完整的可编辑表格应用示例,我们深入了解了Web开发中的前端技术。JavaScript作为核心语言,驱动着应用的交互逻辑。HTML和CSS则负责呈现用户界面和样式效果。通过学习这个应用示例,我们掌握了一些基础的Web开发技巧,例如DOM操作、事件处理、输入验证和动态元素创建。这些技术对于构建更复杂的Web应用和提升用户体验非常重要。
希望本博客能够帮助你打下坚实的Web开发基础,启发你在实际项目中应用这些技术。如果你对这个应用有任何疑问或想进一步拓展它,欢迎留言讨论。感谢你的阅读。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。