隔行换色总结

 功能效果展示:

第一种思路:

使用数组,将数组的内容渲染到页面上,序号也就是将数组的下标输出到第一个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.mzph.cn/web/75033.shtml

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

      相关文章

      使用文本翻译API打破语言障碍

      一、引言 在当今全球化的商业环境中&#xff0c;企业面临着前所未有的语言挑战。无论是出口商品、引进技术&#xff0c;还是与国际客户进行交流&#xff0c;语言障碍始终是一个亟待解决的问题。文本翻译API作为一款高效、稳定的工具&#xff0c;支持多种语言的翻译&#xff0c…

      【unity游戏开发入门到精通——动画篇】Animator2D序列帧动画

      考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

      深入解析 Jenkins Agent 的 .jnlp 启动文件

      &#x1f9e9; 深入解析 Jenkins Agent 的 .jnlp 启动文件 在 Jenkins 中&#xff0c;通过 JNLP&#xff08;Java Network Launch Protocol&#xff09;方式连接 Agent 是一种常见且灵活的方式。你可能曾见过类似这样的命令&#xff1a; java -jar agent.jar -jnlpUrl file:/…

      定积分__

      practice makes perfect 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 若被积函数在积分区间上是可积的&#xff0c;那么变限积分函数在这个区…

      Three.js 系列专题 7:性能优化与最佳实践

      内容概述 随着 3D 场景复杂度的增加,性能优化变得至关重要。Three.js 项目可能因几何体数量、纹理大小或渲染设置而变慢。本专题将介绍减少 draw call、优化纹理和使用调试工具的最佳实践。 学习目标 学会减少 draw call 和几何体复杂度。掌握纹理压缩与内存管理。使用 Stat…

      CentOS 7安装Python3.12

      文章目录 使用pyenv安装python3.12一、gitub下载pyenv二、升级GCC三.升级openssl这样python3.12.9就完成安装在CentOS上啦&#xff01; 使用pyenv安装python3.12 一、gitub下载pyenv https://github.com/pyenv/pyenv 按照README&#xff0c;pyenv教程安装即可 二、升级GCC 安…

      【C++】优先级队列+反向迭代器

      priority_queue的介绍 通常用堆来实现&#xff0c;能在O(log n)的时间复杂度内插入和提取最高&#xff08;或最低&#xff09;优先级的元素。 优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的(默认情况)。此…

      mysql镜像创建docker容器,及其可能遇到的问题

      前提&#xff0c;已经弄好基本的docker服务了。 一、基本流程 1、目录准备 我自己的资料喜欢放在 /data 目录下&#xff0c;所以老规矩&#xff1a; 先进入 /data 目录&#xff1a; cd /data 创建 mysql 目录&#xff1a; mkdir mysql 2、镜像查找 docker search hub.ra…

      快速记忆法,提高知识点背诵效率

      战国七雄&#xff1a;齐秦 韩赵魏 燕楚 谐音记忆&#xff1a;齐秦 喊赵薇 演出 五等爵位&#xff1a;公侯 伯子 男 记忆方法&#xff1a;公猴 脖子 蓝 安卓应用&#xff1a;记忆宫殿APP 记忆 脑力训练&#xff0c;中小学各学科知识点速记&#xff0c;单词趣味记忆&#xff0c…

      从零开始学java--泛型(1)

      泛型 学生成绩可能是数字类型&#xff0c;也可能是字符串类型&#xff0c;如何存放可能出现的两种类型呢&#xff1a; public class Score {String name;String id;Object value; //因为Object是所有类型的父类&#xff0c;因此既可以存放Integer也能存放Stringpublic Score…

      pdf转latex

      Doc2X&#xff08;https://doc2x.noedgeai.com/&#xff09; Doc2X 是一个由 NoEdgeAI 提供的在线工具&#xff0c;主要用于将 PDF 文件&#xff08;尤其是学术论文、报告等文档&#xff09;转换为 LaTeX 格式。LaTeX 是一种高质量排版系统&#xff0c;广泛应用于学术界和出版…

      Visual Studio 2022 UI机器学习训练模块

      VS你还是太超标了&#xff0c;现在机器学习都不用写代码了吗&#xff01;&#xff01; 右键项目解决方案&#xff0c;选择机器学习模型

      无公网实体服务器加装多个操作系统供多个用户互不打扰使用_part1

      背景介绍 因笔者业务需求&#xff0c;入手了一个实体服务器&#xff0c;但为了避免出现在一个操作系统中搭建编程环境后有许多相关的进程和服务&#xff0c;拖慢日常的使用&#xff0c;也能让其他人短期使用&#xff0c;更好的利用服务器的性能&#xff0c;让服务器专注于“什…

      运动规划实战案例 | 基于四叉树分解的路径规划(附ROS C++/Python仿真)

      目录 1 为什么需要四叉树&#xff1f;2 基于四叉树的路径规划2.1 分层抽象2.2 路图搜索2.3 动态剪枝 3 算法仿真3.1 ROS C算法仿真3.2 Python算法仿真 1 为什么需要四叉树&#xff1f; 路径规划的本质是在给定环境中寻找从起点到终点的最优或可行路径&#xff0c;其核心挑战在…

      docker快捷打包脚本(ai版)

      直接进入主题&#xff1a; 用这个脚本前提是你本地可以拉镜像仓库的镜像&#xff0c;并且在 本地有了&#xff0c;然后将所有的镜像tag写在一个文件中&#xff0c;和下面docker_tags.txt 对应&#xff0c;文件叫什么&#xff0c;脚本里对应改什么&#xff0c;给小白说的 #!/bi…

      WinMerge下载及使用教程(附安装包)

      文章目录 一、WinMerge安装步骤1.WinMerge下载&#xff1a;2.解压&#xff1a;3.启动&#xff1a; 二、WinMerge使用步骤1.添加文件或文件夹2.查看差异3.格式选择 WinMerge v2.16.36 是一款免费开源的文件与文件夹比较、合并工具&#xff0c;能帮您快速找出差异&#xff0c;提高…

      Jmeter性能测试之生成测试报告

      结构 测试计划 测试计划是顶级的层级⽬录的结构&#xff0c; 那么在这样的⽬录结构中&#xff0c;⾥⾯可以包含很多线程组 线程组 线程组我们可以简单的理解为postman测试⼯具⾥⾯的collection&#xff0c;那么在整体线程组⾥⾯&#xff0c;可以添加很多的测试 ⽤例 简单控…

      CSS中的inline-flex与flex的区别

      在CSS中&#xff0c;flex 和 inline-flex 都是用于实现弹性布局&#xff08;Flexbox&#xff09;的显示属性&#xff0c;但它们在布局行为上有所不同。 flex 属性会使元素表现为块级弹性容器&#xff0c;这意味着元素会在页面上占据一整行的空间&#xff0c;无论其内部内容的大…

      Linux的那些基础常用命令汇总

      目录 前言&#xff1a; 用户命令&#xff1a; 管理后台作业命令&#xff1a; 文件目录操作命令&#xff1a; 运维高频使用命令&#xff1a; 磁盘管理以及文件系统命令: 用户、组操作命令&#xff1a; 权限控制命令&#xff1a; 网络配置命令&#xff1a; 软件管理命令…

      高效深度学习lecture03

      lecture_03 **剪枝&#xff1a;**pruning basically turns a dense neural network into a sparse neural network. you can remove those redundant synapses, and also you can remove those redundant neurons. 剪枝的本质上是将稠密的神经网络转变成稀疏的神经网络&#…