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

news/2024/9/28 19:39:20 标签: html, 前端, javascript
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.niftyadmin.cn/n/5681728.html

相关文章

AI大模型对我国劳动力市场潜在影响研究报告(2024)|附19页PDF文件下载

前言 北京大学国家发展研究院与智联招聘日前联合发布《AI大模型对我国劳动力市场潜在影响研究》。该研究显示&#xff0c;2024年上半年&#xff0c;招聘职位数同比增速前五的人工智能职业&#xff0c;包括大语言模型方面的自然语言处理&#xff08;111%&#xff09;、深度学习…

【C#生态园】Excel处理新选择:全方位解析六大C#库

提升数据处理效率&#xff1a;深度评析6款C# Excel处理库的核心功能与优势 前言 在软件开发和数据处理领域&#xff0c;Excel文件是一种广泛使用的数据交换格式。为了更高效地处理Excel文件&#xff0c;开发者们经常会使用各种库和工具来简化这一过程。本文将介绍六种用于C#的…

网络通信1-传输层

tcp的三次握手&#xff1a; TCP&#xff08;传输控制协议&#xff09;的三次握手是建立一个可靠的连接的过程。这个过程中涉及到的主要参数包括&#xff1a; 序列号&#xff08;Sequence Number, SEQ&#xff09;: 在第一次握手中&#xff0c;发起方&#xff08;客户端&#xf…

css 数字比汉字要靠上

这个问题通常是由于数字字体的下排的问题造成的&#xff0c;也就是数字的底部边缘位置比汉字的顶部边缘位置更靠下。为了解决这个问题&#xff0c;可以尝试以下几种方法&#xff1a; 使用CSS的vertical-align属性来调整对齐方式。例如&#xff0c;可以将数字的对齐方式设置为to…

状态模式原理剖析

《状态模式原理剖析》 状态模式&#xff08;State Pattern&#xff09; 是一种行为设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为。换句话说&#xff0c;当对象状态发生变化时&#xff0c;它的行为也会随之变化。 通过状态模式&#xff0c;可以消除通过 if-else…

数据结构:队列及其应用

队列&#xff08;Queue&#xff09;是一种特殊的线性表&#xff0c;它的主要特点是先进先出&#xff08;First In First Out&#xff0c;FIFO&#xff09;。队列只允许在一端&#xff08;队尾&#xff09;进行插入操作&#xff0c;而在另一端&#xff08;队头&#xff09;进行删…

ant design vue做表单验证及form表单外验证、父子嵌套多个表单校验

1、form表单验证(若有时遇到输入框有值但是还是触发验证规则了&#xff0c;请检查form表单绑定正确吗、校验规则正确吗、表格数据字段名正确吗) <a-form:model"formState":label-col"{ span: 8 }":wrapper-col"{ span: 16 }":rules"rul…

flink设置保存点和恢复保存点

增加了hdfs package com.qyt;import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple2;import org.apache.flink.runtime.state.storage.FileSystemCheckpointStorage;import org.apache.flink.streaming.api.datastream.Dat…