html TAB切换按钮变色、自动生成table

embedded/2025/2/15 17:29:24/
html"><!DOCTYPE html>  
<head>  
<meta charset="UTF-8">  
<title>Dynamic Tabs with Table Data</title>  
<style>  /* 简单的样式 */    .tab-content {    display: none;    border: 1px solid #ccc;    padding: 1px;    margin-top: 0px;    }    .tab-content.active {    display: block;    }    button {  margin-right: 0px; /* 添加一些间隔 */  background-color: transparent; /* 初始背景色透明 */  border: 1px solid #ccc; /* 明确边框样式和颜色 */cursor: pointer; /* 鼠标悬停时显示手指形状 */  padding: 5px 10px; /* 增加内边距以便点击 */  }  .active-tab {    background-color: rgb(77, 218, 223); /* 选中时背景色变为蓝色 */  color: white; /* 文本颜色变为白色,以便在蓝色背景上可见 */border-color: rgb(47, 178, 183); /* 更改边框颜色以匹配背景色 */   }    table {    width: 100%;    border-collapse: collapse;    }    th, td {    border: 1px solid #ddd;    padding: 8px;    text-align: left;    }    th {    background-color: #f2f2f2;    }  
</style>  
</head>  
<body>  
<div id="tabs">  <!-- 选项卡头部将在这里动态生成 -->  
</div>  
<div id="tab-contents">  <!-- 选项卡内容(表格)将在这里动态生成 -->  
</div>  <script>javascript">  
// 假设这是从后端获取的数据  
const data = {  "datasets": [  {  "name": "Dataset 1",  "data": [  { "num1": 1234, "num2": 5678, "status1": "on", "status2": "active" },  // 更多数据...  ]  },  {  "name": "Dataset 2",  "data": [  { "num1": 3456, "num2": 7890, "status1": "off", "status2": "inactive" },  // 更多数据...  ]  }  ]  
};  // 动态生成选项卡头部和内容  
const tabsDiv = document.getElementById('tabs');  
const tabContentsDiv = document.getElementById('tab-contents');  // 动态生成选项卡头部和内容  
data.datasets.forEach((dataset, index) => {  const tabButton = document.createElement('button');  tabButton.textContent = `Tab ${index + 1} (${dataset.name})`;  tabButton.onclick = () => {  // 移除所有按钮的.active-tab类  const allTabs = document.querySelectorAll('#tabs button');  allTabs.forEach(tab => tab.classList.remove('active-tab'));  // 为当前点击的按钮添加.active-tab类  tabButton.classList.add('active-tab');  // 显示对应的选项卡内容  showTabContent(index);  };  tabsDiv.appendChild(tabButton); const tabContent = document.createElement('div');  tabContent.className = 'tab-content';  // 创建表格  const table = document.createElement('table');  const thead = table.createTHead();  const headerRow = thead.insertRow();  ['Num1', 'Num2', 'Status1', 'Status2'].forEach(text => {  let th = document.createElement('th');  th.textContent = text;  headerRow.appendChild(th);  });  const tbody = table.createTBody();  dataset.data.forEach(item => {  let row = tbody.insertRow();  ['num1', 'num2', 'status1', 'status2'].forEach(key => {  let cell = row.insertCell();  cell.textContent = item[key];  });  });  tabContent.appendChild(table);  tabContentsDiv.appendChild(tabContent);  
});  // 默认显示第一个选项卡的内容和按钮  
if (data.datasets.length > 0) {  const firstTabButton = tabsDiv.querySelector('button');  firstTabButton.classList.add('active-tab');  const firstTabContent = tabContentsDiv.querySelector('.tab-content');  firstTabContent.classList.add('active');  
}  function showTabContent(index) {  const tabContents = document.querySelectorAll('.tab-content');  tabContents.forEach(tabContent => tabContent.classList.remove('active'));  tabContents[index].classList.add('active');  
}  
</script>  
</body>  
</html>

在这里插入图片描述


http://www.ppmy.cn/embedded/119069.html

相关文章

初始爬虫9

1.元素定位后的操作 “find_element“仅仅能够获取元素&#xff0c;不能够直接获取其中的数据&#xff0c;如果需要获取数据需要使用以下方法”。下面列出了两个方法&#xff1a; 获取文本 element.text 通过定位获取的标签对象的 text 属性&#xff0c;获取文本内容 获取属性…

思科安全网络解决方案

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

.NET IIS发布项目后设置虚拟路径访问文件 404

解决方案: 找到Startup.cs中适当配置静态文件中间件&#xff1a; 确保调用了UseStaticFiles中间件 public void Configure(IApplicationBuilder app) {app.UseStaticFiles(); // 确保这行在UseRouting之前app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoin…

木舟0基础学习Java的第三十一天(SpringMVC,xml式和注解式开发,携带数据,取值,视图解析)

SpringMVC Mybatis: 优化了dao层 降低了java与dao层的耦合 Spring:是大管家 整合和管理mybatis与springmve(是spring中子模块) SpringMVC:优化了servlet层 降低了java与servlet的耦合 为什么要使用 springMVC? SpringMVC 是一种基于 Java&#xff0c;实现了 Web MVC 设计模…

在传销案件中数据库取证的分步指南

金字塔计划的特点是分层结构&#xff0c;主要由招募新成员的机制驱动。取证部门调查这些方案时&#xff0c;往往依靠数据库记录来分析这种结构。这些记录详细描述了上级和下级之间的关系&#xff0c;使调查人员能够描绘出组织的动态。在本文中&#xff0c;我们将探讨如何利用数…

自定义 Git

我们可以对 Git 做一些配置。 ‍ 配置别名 有没有经常敲错命令&#xff1f;比如 git status​&#xff1f;status ​这个单词真心不好记。 如果敲 git st ​就表示 git status ​那就简单多了&#xff0c;当然这种偷懒的办法我们是极力赞成的。 我们只需要敲一行命令&…

【技术文章】PostgreSQL分区表

引言 PostgreSQL作为一款高度可扩展的企业级关系型数据库管理系统&#xff0c;其内置的分区表功能在处理大规模数据场景中扮演着重要角色。本文将深入探讨PostgreSQL分区表的实现逻辑、详细实验过程&#xff0c;并辅以分区表相关的视图查询、分区表维护及优化案例&#xff0c;…

GB/T28181规范解读和技术实现

GB/T28181发展历程 GB/T28181-2011&#xff1a; 提出与起草&#xff1a;由公安部科技信息化局提出&#xff0c;全国安全防范报警系统标准化技术委员会&#xff08;SAC/TC100&#xff09;归口&#xff0c;公安部一所等多家单位共同起草。发布与实施&#xff1a;2012 年 6 月 1 …