实现一个todoList可直接操作数据(上移、下移、置顶、置底)

2023-10-15 06:15

本文主要是介绍实现一个todoList可直接操作数据(上移、下移、置顶、置底),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

演示

请添加图片描述

HTML部分

<!DOCTYPE html>
<html>
<head><title>表格示例</title>
</head>
<body><table border="1"><thead><tr><th>更新时间</th><th>操作</th></tr></thead><tbody id="tableBody"><!-- 这里是虚拟数据行,你可以根据需要添加更多 --><tr><td>2023-10-13 10:00 ---- PM</td><td><button onclick="moveUp(this)">上移</button><button onclick="moveDown(this)">下移</button><button onclick="moveToTop(this)">置顶</button><button onclick="moveToBottom(this)">置底</button><button onclick="removeRow(this)">删除</button></td></tr><tr><td>2023-10-13 02:30 ---- AM</td><td><button onclick="moveUp(this)">上移</button><button onclick="moveDown(this)">下移</button><button onclick="moveToTop(this)">置顶</button><button onclick="moveToBottom(this)">置底</button><button onclick="removeRow(this)">删除</button></td></tr></tbody></table><button onclick="addRow()">添加数据行</button><script>var dataList = [{ time: "2023-10-13 10:00 PM", operation: "示例操作1" },{ time: "2023-10-13 02:30 AM", operation: "示例操作2" },// 添加更多数据行];// 初始化表格function initializeTable() {var tableBody = document.getElementById("tableBody");tableBody.innerHTML = ""; // 清空表格内容dataList.forEach(function (data) {var newRow = document.createElement("tr");newRow.innerHTML = `<td>${data.time}</td><td><button onclick="moveUp(this)">上移</button><button onclick="moveDown(this)">下移</button><button onclick="moveToTop(this)">置顶</button><button onclick="moveToBottom(this)">置底</button><button onclick="removeRow(this)">删除</button></td>`;tableBody.appendChild(newRow);});// console.log("🚀 ~ file: tabel.html:47 ~ dataList:", dataList)}// 添加行function addRow() {var newTime = getCurrentTime() + ' ---- ' + Math.round(Math.random() * 100 + 1);dataList.push({ time: newTime, operation: "新操作" });initializeTable(); // Re-render the table}        //移除行function removeRow(button) {// var row = button.closest("tr"); // 获取包含按钮的行//查找DOM树中最接近指定选择器的祖先元素var row = button.parentNode.parentNode; // 两次 parentNode 分别获取按钮的 <td> 元素和 <tr> 元素var rowIndex = row.rowIndex - 1; // 减1以考虑表头行console.log("🚀 ~ file: tabel.html:83 ~ removeRow ~ row:", row)if (rowIndex >0) {dataList.splice(rowIndex, 1); // 从数据列表中移除相应的数据console.log("🚀 ~ file: tabel.html:85 ~ removeRow ~ dataList:", dataList)initializeTable(); // 重新渲染表格}else{alert('行行好,再删除就没了')}}function getCurrentTime() {var now = new Date();var year = now.getFullYear();var month = (now.getMonth() + 1).toString().padStart(2, '0');var day = now.getDate().toString().padStart(2, '0');var hours = now.getHours().toString().padStart(2, '0');var minutes = now.getMinutes().toString().padStart(2, '0');var time = `${year}-${month}-${day} ${hours}:${minutes}`;return time;}</script>
</body>
</html>

上移

        //上移function moveUp(button) {var row = button.closest("tr"); // 找到包含按钮的行var rowIndex = row.rowIndex - 1; // 表格行索引(减1以考虑表头行)if (rowIndex > 0) { // 确保不是第一行// 交换当前行和上一行的数据var temp = dataList[rowIndex];dataList[rowIndex] = dataList[rowIndex - 1];dataList[rowIndex - 1] = temp;initializeTable(); // 重新渲染表格}else{alert('别再点了,已经是第一行了')}            }

下移

// 下移function moveDown(button) {var row = button.closest("tr"); // 找到包含按钮的行var rowIndex = row.rowIndex - 1; // 表格行索引(减1以考虑表头行)if (rowIndex < dataList.length - 1) { // 确保不是最后一行// 交换当前行和下一行的数据var temp = dataList[rowIndex];dataList[rowIndex] = dataList[rowIndex + 1];dataList[rowIndex + 1] = temp;initializeTable(); // 重新渲染表格}else{alert('别再点了,已经是最后一行了')}    }

置顶

        //置顶function moveToTop(button) {var row = button.closest("tr"); // 找到包含按钮的行var rowIndex = row.rowIndex - 1; // 表格行索引(减1以考虑表头行)if (rowIndex > 0) { // 确保不是第一行// 将当前行数据移到数组的开头var movedRowData = dataList.splice(rowIndex, 1)[0];console.log("🚀 ~ file: tabel.html:135 ~ moveToTop ~ movedRowData:", movedRowData)dataList.unshift(movedRowData);initializeTable(); // 重新渲染表格}else{alert('行行好,已经是第一个了')}}

置底

//置底function moveToBottom(button) {var row = button.closest("tr"); // 找到包含按钮的行var rowIndex = row.rowIndex - 1; // 表格行索引(减1以考虑表头行)if (rowIndex < dataList.length - 1) { // 确保不是最后一行// 将当前行数据移到数组的末尾var movedRowData = dataList.splice(rowIndex, 1)[0];dataList.push(movedRowData);initializeTable(); // 重新渲染表格}}

这篇关于实现一个todoList可直接操作数据(上移、下移、置顶、置底)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/215872

相关文章

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.