隔行换色总结

news2025/4/14 12:54:55

 功能效果展示:

第一种思路:

使用数组,将数组的内容渲染到页面上,序号也就是将数组的下标输出到第一个td上,将数组的内容输出到第二个td上,(使用``拼接字符串)

具体操作:

1.HTML 结构搭建​

  • 首先,让我们来看一下 HTML 代码。我们创建了一个基本的表格结构,<table>标签定义了整个表格,cellspacing="0"属性用于消除表格单元格之间的间距。​
  • <thead>标签内包含了表格的头部信息,这里有一行<tr>,其中三个<th>标签分别定义了 “序号”“内容”“操作” 三个表头。​
  • <tbody>标签则是表格主体内容的容器,初始时,我们预留了它作为动态生成表格行的区域,注释掉了一个示例的<tr>行,这行只是为了展示结构,实际运行时将由 JavaScript 动态生成。​
  • 最后,还有一个<button>按钮,其类名为add,并绑定了一个点击事件οnclick="addData()",用于触发添加数据行的操作。

    html:

    <table cellspacing="0">
    			<thead>
    				<tr>
    					<th>
    						序号
    					</th>
    					<th>
    						内容
    					</th>
    					<th>
    						操作
    					</th>
    				</tr>
    			</thead>
    			<tbody>
    				<!-- <tr>
    					<td>
    						1
    					</td>
    					<td>
    						data
    					</td>
    					<td>
    						<button class="del">删除</button>
    					</td>
    				</tr> -->
    			</tbody>
    		</table>
    		<button class="add" onclick="addData()">添加行</button>
    

    css:

    2.CSS 样式美化​

    • 为了让表格看起来更加美观和易于阅读,我们添加了一些 CSS 样式。​
    • *选择器用于清除所有元素的默认内外边距,确保表格布局的一致性。​
    • table选择器虽然目前只注释掉了设置边框的代码,但为后续可能的整体表格样式调整预留了空间。​
    • th选择器为表头单元格设置了内边距和较粗的边框,使其更加醒目。​
    • td选择器为普通单元格设置了适当的内边距和较细的边框,区分表头与内容单元格的视觉效果。

      <style>
      			* {
      				margin: 0;
      				padding: 0;
      			}
      
      			table {
      				/* border: black 2px solid; */
      			}
      
      			th {
      				padding: 5px 20px 5px 20px;
      				border: 2px solid black;
      			}
      
      			td {
      				padding: 5px 20px 5px 20px;
      				border: 1px solid black;
      			}
      		</style>

      js:

      3.JavaScript 功能实现​

      • 初始化变量:​
      • 我们定义了一个数组arr,并初始化为[100],这个数组将用于存储表格中的数据。​
      • 获取页面中的<tbody>元素,并赋值给变量body,后续将通过它来操作表格主体内容。​
      • 获取类名为add的按钮元素,并赋值给变量add​
      • 表格渲染函数apply:​
      • apply函数负责将数组中的数据渲染到表格中。它首先初始化一个空字符串str,用于存储生成的 HTML 代码片段。​
      • 通过for循环遍历数组arr,在每次循环中,使用模板字符串生成一个<tr>行的 HTML 代码。这里利用三元运算符${i%2!==0?'style="background-color: aqua;"':''}根据i的奇偶性为<tr>行设置不同的背景颜色,奇数行背景色为aqua,偶数行保持默认。​
      • 然后将当前行的序号i + 1、数组中的数据arr[i]以及一个带有删除功能的<button>按钮(点击时调用delData(${i})函数)分别插入到对应的<td>元素中。​
      • 循环结束后,将生成的完整 HTML 字符串str赋值给body.innerHTML,从而实现表格的渲染。​
      • 添加数据函数addData:​
      • addData函数用于实现添加数据行的功能。它首先将变量num的值增加 100,这里的num用于生成新的数据值。​
      • 然后将新生成的num值通过arr.push(num)方法添加到数组arr中,并在控制台打印数组arr,方便查看数据更新情况。​
      • 最后调用apply函数,重新渲染表格,使新添加的数据能够及时显示在页面上。​
      • 删除数据函数delData:​
      • delData函数接收一个参数index,该参数表示要删除的数据在数组中的索引。​
      • 它通过arr.splice(index, 1)方法从数组arr中移除指定索引位置的数据。​
      • 同样调用apply函数,重新渲染表格,实现删除数据行后页面的实时更新。
      let arr = [100];
      			let body = document.getElementsByTagName('tbody')[0];
      			let add = document.getElementsByClassName('add')[0];
      			console.log(add);
      
      function apply() {
      				let str = "";
      				for (i = 0; i < arr.length; i++) {
      					str +=
      						`
      				<tr ${i%2!==0?'style="background-color: aqua;"':''}>
      					<td>
      						${i+1}
      					</td>
      					<td>
      						${arr[i]}
      					</td>
      					<td>
      						<button class="del" onclick="delData(${i})">删除</button>
      					</td>
      				</tr>
      				`;
      				}
      				body.innerHTML = str;
      			}
      			apply();
      
      			let num = 100;
      
      			// 添加函数
      			function addData() {
      				num += 100;
      				console.log(num);
      				arr.push(num);
      				console.log(arr);
      				apply();
      			}
      
      			// 删除
      			function delData(index){
      				arr.splice(index,1);
      				apply();
      			}

      以上是第一种思路:

      第二种思路中,html和css是一致的,所以我们就只讲js中的具体操作。

      • dataNum:初始值为 100,用于为新添加的行提供数据。
      // 添加函数
      			function addData() {
      				let tr = document.createElement('tr');
      				let tdNum = document.createElement('td');
      				let tdData = document.createElement('td');
      				let tdDel = document.createElement('td');
      				// let num = document.createTextNode();
      				let data = document.createTextNode(dataNum);
      				let delText = document.createTextNode("删除");
      				let del = document.createElement('button');
      				del.appendChild(delText);
      				tdDel.appendChild(del);
      				// tdNum.appendChild(num);
      				tdData.appendChild(data);
      				tr.appendChild(tdNum);
      				tr.appendChild(tdData);
      				tr.appendChild(tdDel);
      				console.log(tr);
      				body.appendChild(tr);
      				dataNum += 100;
      				rowColor();
      				numOrder();
      			}
      
      			// 序号函数
      			function numOrder() {
      				let trNum = body.children;
      				console.log(trNum);
      				for (i = 0; i < trNum.length; i++) {
      					console.log(i);
      					trNum[i].children[0].innerHTML = i+1;
      				}
      				rowColor();
      			}
      			
      			// 颜色函数
      			function rowColor() {
      				let trNum = body.children;
      				for (i = 0; i < trNum.length; i++) {
      					if (i % 2 !== 0) {
      						console.log(document.getElementsByTagName('tr')[i]);
      						document.getElementsByTagName('tr')[i+1].style.backgroundColor = "red";
      					}
      					else{
      						document.getElementsByTagName('tr')[i+1].style.backgroundColor = "white";
      					}
      				}
      			}
      			
      			
      			// 删除函数
      			body.addEventListener('click', function(e) {
      				console.log(e.target.innerText);
      				if (e.target.innerText == "删除") {
      					body.removeChild(e.target.parentElement.parentElement);
      				}
      				rowColor();
      				numOrder();
      			})
      
      1. 添加函数 addData

        • 创建一个新的表格行 tr 以及三个单元格 tdNumtdData 和 tdDel
        • 创建文本节点 data 和 delText,分别表示数据和 “删除” 按钮的文本。
        • 创建 “删除” 按钮 del,并将 delText 添加到按钮中。
        • 将 data 添加到 tdData 中,将 del 添加到 tdDel 中。
        • 将三个单元格添加到 tr 中,并将 tr 添加到表体 body 中。
        • dataNum 增加 100,以便下次添加行时使用新的数据。
        • 调用 rowColor 和 numOrder 函数,更新表格的颜色和序号。
      2. 序号函数 numOrder

        • 获取表体中的所有行 trNum
        • 遍历这些行,为每行的第一个单元格设置序号,序号从 1 开始。
        • 调用 rowColor 函数,更新表格的颜色。
      3. 颜色函数 rowColor

        • 获取表体中的所有行 trNum
        • 遍历这些行,根据行的索引奇偶性设置不同的背景颜色,奇数行为红色,偶数行为白色。
      4. 删除函数

        • 为表体添加点击事件监听器。
        • 当点击的元素文本为 “删除” 时,删除对应的行。
        • 调用 rowColor 和 numOrder 函数,更新表格的颜色和序号。

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

      如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

      相关文章

      使用Docker Desktop进行本地打包和推送

      使用Docker Desktop进行本地打包和推送 一、Docker Desktop配置二、IDEA配置1.下载Docker插件2.在“Settings”中&#xff0c;配置“Docker”3.选择“Docker Registry”&#xff0c;配置远程仓库。 三、POM配置 一共有三个地方需要配置 一、Docker Desktop配置 在Docker Deskt…

      Redis主从复制:告别单身Redis!

      目录 一、 为什么需要主从复制&#xff1f;&#x1f914;二、 如何搭建主从架构&#xff1f;前提条件✅步骤&#x1f4c1; 创建工作目录&#x1f4dc; 创建 Docker Compose 配置文件&#x1f680; 启动所有 Redis&#x1f50d; 验证主从状态 &#x1f4a1; 重要提示和后续改进 …

      ORM、Mybatis和Hibernate、Mybatis使用教程、parameterType、resultType、级联查询案例、resultMap映射

      DAY21.1 Java核心基础 ORM Object Relationship Mapping 对象关系映射 面向对象的程序到—关系型数据库的映射 比如java – MySQL的映射 ORM框架就是实现这个映射的框架 Hibernate、Mybatis、MybatisPlus、Spring Data JPA、Spring JDBC Spring Data JPA的底层就是Hiber…

      C#调用Lua方法1+C#调用Lua方法2,3

      xLua中Lua调用C#代码 原因&#xff1a;C#实现的系统&#xff0c;因为Lua可以调用&#xff0c;所以完全可以换成Lua实现&#xff0c;因为Lua可以即时更改&#xff0c;即时运行&#xff0c;所以游戏的代码逻辑就可以随时更改。 实现和C#相同效果的系统&#xff0c;如何实现&#…

      NO.77十六届蓝桥杯备战|数据结构-单调队列|质量检测(C++)

      什么是单调队列&#xff1f; 单调队列&#xff0c;顾名思义&#xff0c;就是存储的元素要么单调递增要么单调递减的队列。注意&#xff0c;这⾥的队列和普通的队列不⼀样&#xff0c;是⼀个双端队列。单调队列解决的问题 ⼀般⽤于解决滑动窗⼝内最⼤值最⼩值问题&#xff0c;以…

      通过发票四要素信息核验增值税发票真伪-iOS发票查验接口

      发票是企业经济间往来的重要凭证&#xff0c;现如今&#xff0c;随着经济环境的日益复杂&#xff0c;发票造假现象屡禁不止&#xff0c;这使得增值税发票查验成为企业必须高度重视的工作。人工智能时代&#xff0c;发票查验接口犹如一道坚固的防线&#xff0c;助力企业财务守护…

      【JAVA】十、基础知识“类和对象”干货分享~(三)

      目录 1. 封装 1.1 封装的概念 1.2 访问限定符 public&#xff08;公开访问&#xff09; private&#xff08;私有访问&#xff09; 1.3 包 1.3.1 包的概念 1.3.2 导入包中的类 1.3.3 自定义包 2. static成员 2.1 static变量&#xff08;类变量&#xff09; 2.1.1 sta…

      DeepSeek+SpringAI家庭AI医生

      文章目录 项目架构项目开发内容项目用户用例图项目地址开发环境大模型使用本地&#xff1a;Ollama部署DeepSeek离线与在线api大模型客户端使用 数据库脚本代码deepseek创建定制医生模型 内网互通原则云服务器类型 项目架构 项目开发内容 项目用户用例图 项目地址 FamilyAIDoct…

      PyTorch:解锁AI新时代的钥匙

      &#xff08;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff09;。 揭开PyTorch面纱 对于许多刚开始接触人工智能领域的朋友来说&#xff0c;PyTorch这个名字或许既熟悉又陌生。…

      C++第14届蓝桥杯b组学习笔记

      1. 日期统计 小蓝现在有一个长度为 100100 的数组&#xff0c;数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示&#xff1a; 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4…

      解锁工业通信:Profibus DP到ModbusTCP网关指南!

      解锁工业通信&#xff1a;Profibus DP到ModbusTCP网关指南&#xff01; 在工业自动化领域&#xff0c;随着技术的不断进步和应用场景的日益复杂&#xff0c;不同设备和系统之间的通讯协议兼容性问题成为了工程师们面临的一大挑战。尤其是在Profibus DP和Modbus/TCP这两种广泛应…

      每日一题(小白)字符串娱乐篇16

      分析题意可以了解到本题要求在一串字符串中找到所有组合起来排序递增的字符串。我们可以默认所有字符在字符串中的上升序列是1&#xff0c;从第一个字符开始找&#xff0c;如果后面的字符大于前面的字符就说明这是一个上序列那么后面字符所在的数组加一&#xff0c;如果连接不上…

      如何深刻理解Reactor和Proactor

      前言&#xff1a; 网络框架的设计离不开 I/O 线程模型&#xff0c;线程模型的优劣直接决定了系统的吞吐量、可扩展性、安全性等。目前主流的网络框架&#xff0c;在网络 IO 处理层面几乎都采用了I/O 多路复用方案(又以epoll为主)&#xff0c;这是服务端应对高并发的性能利器。 …

      java基础 数组Array的介绍

      Array 数组定义一维数组多维数组动态数组常见方法Arrays排序1.sort() 排序 2.parallelSort() 排序 查找&#xff1a;binarySearch()填充&#xff1a;fill()比较&#xff1a;equals() 和 deepEquals()复制&#xff1a;copyOf() 和 copyOfRange()转换为列表&#xff1a;asList()转…

      我的NISP二级之路-02

      目录 一.数据库 二.TCP/IP协议 分层结构 三.STRIDE模型 四.检查评估与自评估 检查评估 自评估 五.信息安全应急响应过程 六.系统工程 七.SSE-CMM 八.CC标准 九.九项重点工作 记背: 一.数据库 关于数据库恢复技术&#xff0c;下列说法不正确的是&#xff1a…

      常见的微信个人号二次开发功能

      一、常见开发功能 1. 好友管理 好友列表维护 添加/删除好友 修改好友信息&#xff08;备注、标签等&#xff09; 分组管理 创建/编辑/删除标签 好友分类与筛选 2. 消息管理 信息发送 支持多类型内容&#xff1a;文本、图片、视频、文件、小程序、名片、URL链接等 附加功…

      unity的dots中instantiate克隆对象后,对象会在原位置闪现的原因和解决

      原因 在Entity中有两个位置信息&#xff0c;一个是local transform。一个是local to world 其中local transform负责具体位置&#xff0c;local to world 负责渲染位置&#xff0c;即图像的渲染的位置是根据local to world的。 local to world 的更新是引擎自己控制的&#x…

      R语言——绘制生命曲线图(细胞因子IL5)

      绘制生命曲线图&#xff08;根据细胞因子&#xff09; 说明流程代码加载包读取Excel文件清理数据重命名列名处理IL-5中的"<"符号 - 替换为检测下限的一半首先找出所有包含"<"的值检查缺失移除缺失值根据IL-5中位数将患者分为高低两组 创建生存对象拟…

      神马系统8.5搭建过程,附源码数据库

      项目介绍 神马系统是多年来流行的一款电视端应用&#xff0c;历经多年的发展&#xff0c;在稳定性和易用性方面都比较友好。 十多年前当家里的第一台智能电视买回家&#xff0c;就泡在某论坛&#xff0c;找了很多APP安装在电视上&#xff0c;其中这个神马系统就是用得很久的一…

      大模型论文:Improving Language Understanding by Generative Pre-Training

      大模型论文&#xff1a;Improving Language Understanding by Generative Pre-Training OpenAI2018 文章地址&#xff1a;https://www.mikecaptain.com/resources/pdf/GPT-1.pdf 摘要 自然语言理解包括各种各样的任务&#xff0c;如文本蕴涵、问题回答、语义相似性评估和文…