实现一个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(); // 重新渲染表格}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/139361.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从恐怖到商机:2023万圣节跨境电商如何打造鬼魅消费体验?

又到了一年一度的糖果、恐怖装扮和万圣节派对的时候&#xff01;随着10月底的日子临近&#xff0c;人们开始为庆祝万圣节做各种各样的准备。而对于跨境电商来说&#xff0c;这个节日也是一个独特的商机&#xff0c;能够在全球市场上推广各种各样的节日相关商品。Adobe Digital …

Jupyter Notebook的使用

以管理员身份运行 命令行显示内容含义 JupyterLab application directory is D:\Program Files\anaconda\share\jupyter\lab↑这一行是JupyterLab的地址 Serving notebooks from local directory: C:\Users\Sylvia\Documents↑这一行是文件的保存地址。其中Users中文文件夹名是…

【C语言】——通讯录(静态-动态增长-文件储存)

目录 前言&#xff1a; 一&#xff1a;整体框架 关于通讯录结构体的创建 二&#xff1a;通讯录的功能实现&#xff08;静态&#xff09; 2.1初始化通讯录 2.2增加联系人 2.3打印通讯录 2.4删除联系人 2.5 查找联系人 2.6修改联系人 2.7排序联系人 三&#xff1a;通…

14.10 Socket 套接字选择通信

对于网络通信中的服务端来说&#xff0c;显然不可能是一对一的&#xff0c;我们所希望的是服务端启用一份则可以选择性的与特定一个客户端通信&#xff0c;而当不需要与客户端通信时&#xff0c;则只需要将该套接字挂到链表中存储并等待后续操作&#xff0c;套接字服务端通过多…

Spring Boot 3.0 已经就绪,您准备好了么?

Java 微服务开发框架王者 Spring 2014 年的 4 月&#xff0c;Spring Boot 1.0.0 正式发布。距离 1.0 版本的发布已经过去了 9 年多的时间&#xff0c;如今 Spring Boot 已经被 Java 开发者广泛使用&#xff0c;正如 JRebel 的 2022 年开发者生产力报告中提到的那样&#xff0c…

pdf压缩文件怎么压缩最小?

pdf压缩文件怎么压缩最小&#xff1f;我们很多项目介绍或是学术的报告都是采用的这个pdf格式&#xff0c;那么我们在存储或是需要进行分享的时候&#xff0c;可能就会因为文件过大而导致无法打开或是发送了。那么就需要将其进行压缩。PDF文件压缩方法很多&#xff0c;pdf压缩文…

基于安卓Android的掌上酒店预订APP

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把掌上酒店预订与现在网络相结合&#xff0c;利用java技术建设掌上酒店预订APP&#xff0c;实现掌上酒店预订的信息化。则对于进一步提高掌上酒店预订发展&#xff0c;丰富掌上酒店预订经验能起到不少的促进作用。 掌上酒…

Netty 入门 — 要想掌握 Netty,你必须知道它的这些核心组件

在上篇文章&#xff08;Netty 入门 — 亘古不变的Hello World&#xff09;中&#xff0c;我们简单认识了开发一个 Netty 服务端和客户端代码的主要步骤了&#xff0c;在这几大步骤中我们基本上可以看出 Netty 的几个核心组件。 在真正进入 Netty 的学习之前&#xff0c;我们非…

docker-compose安装

如果提示docker-compose未找到命令&#xff0c;需要安装一下 curl -L https://github.com/docker/compose/releases/download/1.23.0-rc2/run.sh > /usr/local/bin/docker-compose 修改权限 chmod x /usr/local/bin/docker-compose 建立软连接 ln -s /usr/local/bin/do…

如何利用BIGEMAP软件查看历史影像

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 很多人都在寻找历史影像图&#xff0c;这块的需求是非常大&#xff0c;历史影像一般可以用于历史地貌的变迁分析&#xff0c;还原以前的生态场景&#xff0c;对范围面积…

微信小程序获取手机号和openid

小程序通过wx.login组件会返回一个code&#xff0c;这个code用来获得用户的openid。 小程序写法为&#xff1a; wx.login({success (res) {if (res.code) {//发起网络请求wx.request({url: https://example.com/onLogin,// 后台给的请求地址data: {code: res.code}})} else {…

2023年中国熔盐储能装机量、新增装机量及行业投资规模分析[图]

熔盐储能是一种可以传递能量、长时间&#xff08;6-8h&#xff09;、大容量储能的技术路径&#xff0c;作为传热介质可以实现太阳能到热能的转换&#xff0c;作为储能介质可以实现将热能和电能的双向转换&#xff0c;可以很好的适应和解决以上两大矛盾。因此&#xff0c;熔盐储…