原生HTML

news2025/1/23 7:38:58

一、表格

1、固定表格

<div class="tablebox">
            <div class="table-container">
              <table id="myTable" border="0" cellspacing="0" cellpadding="0">
                <thead>
                  <tr></tr>
                </thead>
                <tbody></tbody>
              </table>
              <img
                id="noDataImage"
                src="./img/zanwu.svg"
                style="display: none; margin: 20px auto 0"
              />
            </div>
          </div>
      let fixedArr = [
        { name: 'ID', width: 50, val: 'baojia_id' },
        { name: '客户名称', width: 110, val: 'customer_name' },
        { name: '创建时间', width: 110, val: 'created_at' },
        { name: '状态', width: 110, val: 'status_text' },
        { name: '产品种类', width: 110, val: 'category_name' },
        { name: '报价公式', width: 110, val: 'formula_name' },
        { name: '产品', width: 110, val: 'product_name' },
        { name: '报价单名称', width: 110, val: 'baojia_name' },
        { name: '报价日期', width: 110, val: 'quote_date' },
        { name: '备注', width: 150, val: 'remark' },
      ]
      let sessionArr = []

      // 表格头部固定部分
      function table() {
          let htmlth = ''
          sessionArr = fixedArr
          fixedArr.forEach((obj, index) => {
            htmlth +=
              "<th class='tablebox_th1 fixed' width=" +
              obj.width +
              '>' +
              obj.name +
              '</th>'
          })
          tabletr.innerHTML = htmlth
      }
      table()

     //获取数据
function kehu(val) {
        let datas = val
        if (val) {
          $.ajax({
            type: 'GET',
            url: '接口地址',
            data: datas,
            datatype: 'json',
            timeout: 50000, //超时时间设置,单位毫秒
            success: function (data) {
              if (data.success === true) {
                tableData = []
                if (data.data.length === 0) {
                  tabletr.innerHTML = ''
                  table()
                  tabletbody.innerHTML = ''
                  document.getElementById('noDataImage').style.display = 'block'
                } else {
                  tabletr.innerHTML = ''
                  table()
                  tabletbody.innerHTML = ''
                  document.getElementById('noDataImage').style.display = 'none'
                  tableData = data.data
                  var htmlStr = ''

                  // 内容
                  tableData.forEach((obj, index) => {
                    htmlStr += '<tr class="active">'
                    sessionArr.forEach((ele) => {
                      if (ele.val === 'baojia_id') {
                        return (htmlStr +=
                          "<td class='box1 fixed'> <div>" +
                          obj.baojia_id +
                          '</div></td>')
                      } else if (ele.val === 'customer_name') {
                        htmlStr +=
                          "<td class='box1 fixed'> <div>" +
                          obj.customer_name +
                          '</div></td>'
                      } else if (ele.val === 'created_at') {
                        htmlStr +=
                          "<td class='box1 fixed'> <div>" +
                          obj.created_at +
                          '</div></td>'
                      } else if (ele.val === 'status_text') {
                        htmlStr +=
                          "<td class='box1 state fixed'> <div>" +
                          obj.status_text +
                          '</div></td>'
                      } else if (ele.val === 'category_name') {
                        htmlStr +=
                          "<td class='box1 stybox fixed'> <div>" +
                          obj.category_name +
                          '</div></td>'
                      } else if (ele.val === 'formula_name') {
                        htmlStr +=
                          "<td class='box1 stybox fixed'> <div>" +
                          obj.formula_name +
                          '</div></td>'
                      } else if (ele.val === 'product_name') {
                        htmlStr +=
                          "<td class='box1 fixed'>" + obj.product_name + '</td>'
                      } else if (ele.val === 'baojia_name') {
                        htmlStr +=
                          "<td class='box1 fixed'>" + obj.baojia_name + '</td>'
                      } else if (ele.val === 'quote_date') {
                        htmlStr +=
                          "<td class='box1 fixed'>" + obj.quote_date + '</td>'
                      } else if (ele.val === 'remark') {
                        htmlStr +=
                          "<td class='box1 fixed'>" +
                          (obj.remark === null ? '暂无' : obj.remark) +
                          '</td>'
                      }
                    })
                    htmlStr += '</tr>'
                    tabletbody.innerHTML = htmlStr
                  })
                  //表格样式(隔行变色)
                  sutcolor()
                }
              }
            },
            error: function (error) {
              console.log(error)
              // showErrorTips('网络错误')
            },
          })
        }
      }
kehu(val)

2、 动态表格

<div class="tablebox">
            <div class="table-container">
              <table id="myTable" border="0" cellspacing="0" cellpadding="0">
                <thead>
                  <tr></tr>
                </thead>
                <tbody></tbody>
              </table>
              <img
                id="noDataImage"
                src="./img/zanwu.svg"
                style="display: none; margin: 20px auto 0"
              />
            </div>
          </div>
function kehu(val) {
        let datas = val
        if (val) {
          $.ajax({
            type: 'GET',
            url: 'http://39.99.247.200/admin/api/get-quotes/',
            data: datas,
            datatype: 'json',
            timeout: 50000, //超时时间设置,单位毫秒
            success: function (data) {
              if (data.success === true) {
                tableData = []
                if (data.data.length === 0) {
                  tabletr.innerHTML = ''
                  table()
                  tabletbody.innerHTML = ''
                  document.getElementById('noDataImage').style.display = 'block'
                } else {
                  tabletr.innerHTML = ''
                  table()
                  tabletbody.innerHTML = ''
                  document.getElementById('noDataImage').style.display = 'none'
                  tableData = data.data
                  var htmlStr = ''
                  // 动态表头
                  let newArr = []
                  newArr = JSON.parse(readDataFromLocal('tabledynamics'))
                  sessiondynamics = []
                  newArr.forEach((el) => {
                    Object.keys(tableData[0].element_data).forEach((key) => {
                      if (key === el) {
                        sessiondynamics.push(key)
                        const tableth = document.createElement('th')
                        tableth.textContent = key
                        tableth.classList.add('tablebox_th2')
                        tableth.width = 120
                        tabletr.appendChild(tableth)
                      }
                    })
                  })
                  tablethead.appendChild(tabletr)
                  const tr = document.createElement('tr')

                  // 内容
                  tableData.forEach((obj, index) => {
                    htmlStr += '<tr class="active">'
                    sessiondynamics.forEach((obje) => {
                      Object.keys(obj.element_data).forEach((key) => {
                        if (obje === key) {
                          htmlStr +=
                            "<td class='box2'>" +
                            obj.element_data[key] +
                            '</td>'
                        }
                      })
                    })
                    htmlStr += '</tr>'
                    tabletbody.innerHTML = htmlStr
                  })

                  sutcolor()
                }
              }
            },
            error: function (error) {
              console.log(error)
              // showErrorTips('网络错误')
            },
          })
        }
      }
kehu(val)

3、表格的样式

隔行变色

// 创建隔行换色函数
      function sutcolor() {
        // 获取当前tbody内tr的数量,表示为有多少行
        let trs = tabletbody.children

        // 循环行数{
        for (let i = 0; i < trs.length; i++) {
          // 判断当前下标 % 2 取余数 是否等于 1 ,等于1表示奇数{
          if (i % 2 == 1) {
            // 循环行数{
            for (let j = 0; j < trs[i].children.length; j++) {
              if (
                trs[i].children[j].className.includes('box1') ||
                trs[i].children[j].className.includes('box3')
              ) {
                trs[i].children[j].style.backgroundColor = '#dee9ff'
              } else {
                trs[i].children[j].style.backgroundColor = '#f4f7ff'
              }
            }
          } else {
            // 循环行数{
            for (let j = 0; j < trs[i].children.length; j++) {
              if (
                trs[i].children[j].className.includes('box1') ||
                trs[i].children[j].className.includes('box3')
              ) {
                // 给奇数这一行的颜色设置
                trs[i].children[j].style.backgroundColor = '#f4f7ff'
              } else {
                trs[i].children[j].style.backgroundColor = '#fff'
              }
            }
          }
        }
      }

固定前几列

// 固定前面几列
      function stickyTableColumns() {
        const table = document.querySelector('table') // 获取表格元素
        const tbody = table.querySelector('tbody') // 获取tbody元素
        const rows = tbody.querySelectorAll('tr') // 获取所有行
        const ths = table.querySelector('thead tr') // 获取所有表头
        const thCount = table.querySelector('thead tr').childElementCount // 获取表头列数
        //浏览器的宽度是否小于1200px,小于就不固定前几项
        if (window.innerWidth < 1200) {
          // 遍历所有的单元格,为除了前6列的列添加position: sticky样式
          rows.forEach((row) => {
            const cells = row.querySelectorAll('td')
            let width = 0
            // 循环行数{
            for (let j = 0; j < cells.length; j++) {
              cells[j].classList.remove('fixed')
              cells[j].classList.remove('box-shadow1')
            }
          })
          const thcells = ths.querySelectorAll('th')
          thcells[thcells.length - 1].classList.remove('box-shadow1')
        } else {
          // 遍历所有的单元格,为除了前6列的列添加position: sticky样式
          rows.forEach((row) => {
            const cells = row.querySelectorAll('td')
            let width = 0
            // 循环行数{
            for (let j = 0; j < cells.length; j++) {
              if (cells[j].className.includes('box1')) {
                if (j === 0) {
                  cells[j].style.left = 0 + 'px'
                } else {
                  width = width + cells[j - 1].offsetWidth
                  cells[j].style.left = width + 'px'
                }
              }
              // if (cells[j].className.includes('box3')) {
              //   if (j === cells.length - 1) {
              //     cells[j].style.right = 0 + 'px'
              //   }
              // }
            }
          })

          // 遍历表头所有的单元格
          const thcells = ths.querySelectorAll('th')
          let thwidth = 0
          // 循环行数
          for (let j = 0; j < thcells.length; j++) {
            if (thcells[j].className.includes('tablebox_th1')) {
              // thcells[j].classList.add('new-class')
              // document.querySelector('fixed0')
              // thcells[j].style.position = 'sticky'
              if (j === 0) {
                thcells[j].style.left = 0 + 'px'
              } else {
                thwidth = thwidth + thcells[j - 1].offsetWidth
                thcells[j].style.left = thwidth + 'px'
              }
            }
            // if (thcells[j].className.includes('tablebox_th3')) {
            //   if (j === thcells.length - 1) {
            //     thcells[j].style.right = 0 + 'px'
            //   }
            // }
          }
        }
      }

表格高度自适应

// 表格的高度自适应
      function tableheight() {
        //浏览器的宽度是否小于1200px,表格的高度
        if (window.innerWidth < 1200) {
          // tablebox.style.height = 'auto'
          tablebox.style.minHeight = '100'
        } else {
          // let gao = Number(tablebox.offsetTop) + 65
          let gao = Number(tablebox.offsetTop) + 35
          tablebox.style.height = 'calc(100vh - ' + gao + 'px)'
        }
      }
      tableheight()

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

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

相关文章

Class ‘com.xxx.xxx‘ not found in module ‘xxxx‘ 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 问题所示 启动项目的时候,出现如下Bug: Class ‘com.xxx.xxx‘ not found in module ‘xxxx‘截图如下: 2. 原理分析 Java 项目中引用的类未能被正…

ngrok同时配置多个内网穿透方法

一、概要 ngrok可以用来配置免费的内网穿透&#xff0c;启动后就可以用外网ip:端口访问到自己计算机的某个端口了。 可以用来从外网访问自己的测试页面&#xff08;80、8080&#xff09;、ftp文件传输&#xff08;21&#xff09;、远程桌面&#xff08;3389&#xff09;等。 …

OGG 19C 集成模式启用DDL复制

接Oracle19C PDB 环境下 OGG 搭建&#xff08;PDB to PDB&#xff09;_cdb架构 配置ogg-CSDN博客&#xff0c;给 pdb 环境 ogg 配置 DDL 功能。 一个报错 SYShfdb1> ddl_setup.sqlOracle GoldenGate DDL Replication setup scriptVerifying that current user has privile…

【计算机网络】- 应用层HTTP协议

目录 初识HTTP 什么是HTTP 版本 HTTPS 模型 HTTP抓包工具 为什么使用 抓包工具的下载 下载后的重要操作 Fiddler的使用 HTTP请求与响应的基本格式 HTTP请求基本格式​编辑 HTTP响应基本格式 协议格式总结❗️❗️❗️​编辑 HTTP 详解 认识 URL URL基本格式 …

基于SpringBoot+Vue的旅游管理系统【源码+文档+部署讲解】

系统介绍 基于SpringBootVue实现的旅游管理系统采用前后端分离架构方式&#xff0c;系统设计了管理员、用户两种角色&#xff0c;系统实现了用户登录与注册、个人中心、用户管理、景点信息管理、订票信息管理、用户评价管理、景点咨询、轮播图管理等功能。 技术选型 开发工具…

Agent群舞,在亚马逊云科技搭建数字营销多代理(Multi-Agent)(下篇)

在本系列的上篇中&#xff0c;小李哥为大家介绍了如何在亚马逊云科技上给社交数字营销场景创建AI代理的方案&#xff0c;用于社交动态的生成和对文章进行推广曝光。在本篇中小李哥将继续本系列的介绍&#xff0c;为大家介绍如何创建主代理&#xff0c;将多个子代理挂载到主代理…

【Ubuntu】安装SSH启用远程连接

【Ubuntu】安装OpenSSH启用远程连接 零、安装软件 使用如下代码安装OpenSSH服务端&#xff1a; sudo apt install openssh-server壹、启动服务 使用如下代码启动OpenSSH服务端&#xff1a; sudo systemctl start ssh贰、配置SSH&#xff08;可跳过&#xff09; 配置文件 …

后端开发Web

Maven Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具 Maven的作用 依赖管理 方便快捷的管理项目依赖的资源&#xff08;jar包&#xff09;&#xff0c;避免版本冲突问题 统一项目结构 提供标准、统一的项目结构 项目构建 标准跨平台(…

STM32项目分享:智能宠物喂食系统(升级版)

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.com/video/BV19hmMY6ErU…

【程序化广告】相关技术(RTB竞价原理、Cookie映射流程、数据统计原理、程序化创意、防作弊方法)

上一篇介绍了【程序化广告】广告投放流程/漏斗/要素/策略/指标&#xff0c;本篇介绍一下程序化广告所使用到的相关技术&#xff0c;包括RTB竞价原理、Cookie映射流程、数据统计原理、程序化创意、防作弊方法等。 1. RTB竞价原理 1&#xff09;竞价逻辑 用户开启电脑&#xf…

STM32补充——IAP

0 前置知识&#xff1a; FLASH相关内容&#xff1a;前往STM32补充——FLASH STM32三种烧录方式&#xff08;看看就行&#xff09;&#xff1a; 1.ISP&#xff1a;In System Programming&#xff08;在系统编程&#xff09; 执行芯片厂商的 Bootloader 程序进入 ISP 模式&…

Spring Boot中选择性加载Bean的几种方式

说明&#xff1a;用过Spring框架的都知道其自动装配的特性&#xff0c;本文介绍几种选择性加载Bean的方式。Spring自动装配参考以下两篇文章&#xff1a; 基于SpringBoot的三层架构开发&统一响应结果 SpringBoot自动装配原理简单分析 ConditionalOnProperty Conditiona…

AI刷题-策略大师:小I与小W的数字猜谜挑战

问题描述 有 1, 2,..., n &#xff0c;n 个数字&#xff0c;其中有且仅有一个数字是中奖的&#xff0c;这个数字是等概率随机生成的。 Alice 和 Bob 进行一个游戏&#xff1a; 两人轮流猜一个 1 到 n 的数字&#xff0c;Alice 先猜。 每完成一次猜测&#xff0c;主持会大声…

利用Java爬虫获取eBay商品详情:代码示例与教程

在当今的电商时代&#xff0c;获取商品详情数据对于市场分析、价格监控和竞品研究至关重要。eBay作为全球最大的电商平台之一&#xff0c;拥有海量的商品信息。通过Java爬虫技术&#xff0c;我们可以高效地获取这些数据&#xff0c;为商业决策提供支持。本文将详细介绍如何使用…

编译Android平台使用的FFmpeg库

目录 前言 一、编译环境 二、搭建环境 1.安装MSYS2 2.更新系统包 2.1 打开MSYS2 MinGW 64-bit终端&#xff08;mingw64.exe&#xff09; 2.2 更新所有软件包到最新版本 2.3 安装必要的工具和库。 3. 克隆FFmpeg源码 4. 配置编译选项 5. 执行编译 总结 前言 记录学习…

30天开发操作系统 第 17 天 -- 命令行窗口

前言 今天一开始&#xff0c;请大家先回忆一下任务A的情形。在harib13e中&#xff0c;任务A下面的LEVEL中有任务因此FIFO为空时我们可以让任务A进入休眠状态。那么&#xff0c;如果我们并未启动任务B0~ B0~ B2, B2的话&#xff0c;任务A又将会如何呢&#xff1f; 首先&#xf…

阿九的python 爬虫进阶课18.3 学习笔记

文章目录 前言1. 爬取大标题2. 爬取小标题3. 证券栏下的标题4. 某篇文章里的具体内容 前言 网课链接&#xff1a;https://www.bilibili.com/video/BV1kV4y1576b/新浪财经网址&#xff1a;https://finance.sina.com.cn/需先下载库&#xff1a; conda install lxml布置爬取的一…

Qt 5.14.2 学习记录 —— 십팔 对话框

文章目录 1、Qt对话框2、自定义对话框1、代码方式2、图形化方式 3、模态对话框4、QMessageBox5、QColorDialog6、QFileDialog7、QFontDialog8、QInputDialog 1、Qt对话框 Qt的对话框用QDialog类来表示&#xff0c;可以自定义一些类来实现自定义对话框&#xff0c;但需要继承自…

web3py+flask+ganache的智能合约教育平台

最近在学习web3的接口文档&#xff0c;使用web3pyflaskganache写了一个简易的智能合约教育平台&#xff0c;语言用的是python&#xff0c;ganche直接使用的本地区块链网络&#xff0c;用web3py进行交互。 代码逻辑不难&#xff0c;可以私信或者到我的闲鱼号夏沫mds获取我的代码…

java中的String类、StringBuffer类、StringBuilder类的详细讲解(包含相互之间的比较)

文章目录 一、String 类1 String 类的介绍2 String 对象创建的两种方式3 测试题加深理解&#xff08;1&#xff09; 例题一&#xff08;2&#xff09;例题二&#xff08;3&#xff09; 例题三 4 String 类的常用方法&#xff08;1&#xff09;equals()&#xff08;2&#xff09…