原生web实现不固定列数的表格、随机列、document、querySelector、forEach、hasOwnProperty、call、includes

文章目录

  • 效果图
  • 公共样式
  • 第一种解决方案(不推荐)
  • 第二种解决方案(强烈推荐)


效果图

randomColumnTable


公共样式

.d_f {display: flex;
}.flex_1 {flex: 1;
}.jc_sb {justify-content: space-between;
}.ai_c {align-items: center;
}.bc_ccc {background-color: #cccccc;
}/* ------------padding------------ */
.bs_bb {box-sizing: border-box;
}.p_6 {padding: 6px;
}.p_lr_6 {padding-left: 6px;padding-right: 6px;
}.p_lr_10 {padding-left: 10px;padding-right: 10px;
}/* - */
.ta_c {text-align: center;
}/* ----------- */
.fw_700 {font-weight: 700;
}/* ------------------- */
.b_1s_000 {border: 1px solid #000000;
}.bl_1s_000 {border-left: 1px solid #000000;
}.br_1s_000 {border-right: 1px solid #000000;
}.bt_1s_000 {border-top: 1px solid #000000;
}.bb_1s_000 {border-bottom: 1px solid #000000;
}/* ----------------------- */
.h_68 {height: 68px;
}.lh_68 {line-height: 68px;
}.h_30 {height: 30px;
}.lh_30 {line-height: 30px;
}

第一种解决方案(不推荐)

html

<div><div><h1 class="ta_c">表格1</h1><div class="b_1s_000"><div id="idTableHead" class="d_f jc_sb bc_ccc fw_700"></div><div id="idTableBody"></div></div></div><div><h1 class="ta_c">表格2</h1><div class="b_1s_000"><div id="idTableHead2" class="d_f jc_sb bc_ccc fw_700"></div><div id="idTableBody2"></div></div></div>
</div>

JavaScript

(function init() {// 表格1createTable([{id: 'a1',title: 'ID'},{id: 'b1',title: '标题'},{id: 'c1',title: '昵称'},{id: 'd1',title: '年龄'},{id: 'e1',title: '等级'}], [{id: 'a1',title: '标题1',name: '归零',age: 23,type: '超级管理员'},{id: 'b1',title: '标题2',name: '趴在墙头等红杏',age: 25,type: '协管员'},{id: 'c1',title: '标题3',name: '零壹',age: 20,type: '观察员'}], 'idTableHead', 'idTableBody');// 表格2createTable([{id: 'b1',title: '标题'},{id: 'c1',title: '昵称'},{id: 'd1',title: '年龄'},{id: 'e1',title: '等级'}], [{id: 'a1',title: '标题1',name: '归零',age: 23,type: '超级管理员'},{id: 'b1',title: '标题2',name: '趴在墙头等红杏',age: 25,type: '协管员'},{id: 'c1',title: '标题3',name: '零壹',age: 20,type: '观察员'}], 'idTableHead2', 'idTableBody2', ['id']);
})();/*** 创建表格* @param {array} tableH 表头* @param {array} tableH 表内容* @param {string} idH 表头id* @param {string} idB 表内容id* @param {array} arr 不需要渲染的字段*/
function createTable(tableH, tableB, idH, idB, arr = []) {let idHEL = document.querySelector(`#${idH}`),idBEL = document.querySelector(`#${idB}`),elTableH = '',elTableB = '';tableH.forEach((item, i) => {elTableH += `<div class="flex_1 ta_c h_30 lh_30 ${i !== 0 ? 'bl_1s_000' : ''}">${item.title}</div>`;});idHEL.innerHTML = elTableH;tableB.forEach(item => {let elB = '<div class="d_f jc_sb ai_c bt_1s_000">',i = 0;for (const key in item) {if (Object.hasOwnProperty.call(item, key)) {const val = item[key];if (!arr.includes(key)) {elB += `<div class="flex_1 ta_c h_30 lh_30 ${i !== 0 ? 'bl_1s_000' : ''}">${val}</div>`;i++;}}}elTableB += elB + '</div>';});idBEL.innerHTML = elTableB;
}

第二种解决方案(强烈推荐)

html

<div><div><h1 class="ta_c">表格3</h1><div id="idTable3" class="b_1s_000"></div></div><div><h1 class="ta_c">表格4</h1><div id="idTable4" class="b_1s_000"></div></div>
</div>

JavaScript

(function init() {let tableArr = [{id: 'a1',title: '标题3',name: '零壹',age: 20,type: '观察员'},{id: 'b1',title: '标题2',name: '趴在墙头等红杏',age: 25,type: '协管员'},{id: 'c1',title: '标题1',name: '归零',age: 23,type: '超级管理员'}];// 表格3createTableRandomColumn([{title: '角色',name: 'type'},{title: '昵称',name: 'name'},{title: '年龄',name: 'age'}],tableArr,'idTable3');// 表格4createTableRandomColumn([{title: '编号',name: 'id',textAlignH: 'center',textAlignB: 'center'},{title: '昵称',name: 'name',textAlignH: 'center',textAlignB: 'left'},{title: '年龄',name: 'age',textAlignH: 'center',textAlignB: 'center'},{title: '标题',name: 'title',textAlignH: 'center',textAlignB: 'left'},{title: '角色',name: 'type',textAlignH: 'center',textAlignB: 'center'}],tableArr,'idTable4');
})();/**
* 创建表格,自定义列的顺序
* @param {array} tableTemplate 表格模板,定义表头,列对应的字段
* @param {array} tableBody 表格内容
* @param {string} idBox 表格容器id
*/
function createTableRandomColumn(tableTemplate, tableBody, idBox) {let idBoxEl = document.querySelector(`#${idBox}`),elHead = '<div class="d_f jc_sb bc_ccc fw_700">',elBody = '<div>';tableTemplate.forEach((item, i) => {elHead += `<div class="flex_1 h_30 lh_30 bs_bb p_lr_10 ${i !== 0 ? 'bl_1s_000' : ''}" style="text-align: ${item.textAlignH ? item.textAlignH : 'center'}">${item.title}</div>`;});tableBody.forEach(item => {let elB = '<div class="d_f jc_sb ai_c bt_1s_000">';tableTemplate.forEach((items, i) => {elB += `<div class="flex_1 h_30 lh_30 bs_bb p_lr_10 ${i !== 0 ? 'bl_1s_000' : ''}" style="text-align: ${items.textAlignB ? items.textAlignB : 'center'}">${item[items.name]}</div>`;});elB += '</div>';elBody += elB;});elHead += '</div>';elBody += '</div>';idBoxEl.innerHTML = elHead + elBody;
}

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

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

相关文章

Docker容器中的Postgresql备份脚本异常解决办法

本文基于K8S中Docker容器对postgres数据库进行备份的操作&#xff0c;编写好脚本后&#xff0c;手动执行脚本是正常的&#xff0c;但是crontab定时实行却报错&#xff0c;报错信息为kubectl command not found&#xff0c;提示没有找到kubectl指令。 本文主要介绍对该报错信息…

m4s格式转换mp4

先安装 ffmpeg&#xff0c;具体从官网可以查到&#xff0c;https://ffmpeg.org&#xff0c;按流程走。 转换代码如下&#xff0c;可以任意选择格式导出 import subprocess import osdef merge_audio_video(input_audio_path, input_video_path, output_mp4_path):# 构建 FFmpe…

大数据处理平台的架构演进:从批处理到实时流处理

文章目录 批处理架构&#xff1a;实时流处理架构&#xff1a;混合架构&#xff1a; &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;大数据系列 ✨文章内容&#xff1a;大数…

CTF-XXE(持续更新,欢迎分享更多相关知识点的题目)

知识 实例 BUU [PHP]XXE 进来看到 然后一起看 Write BUU XXE COURSE 1 进来看到 一起看 write NSS [NCTF2019]Fake XML cookbook 反正是XXE 直接整 write [NCTF 2019]True XML cookbook 不整花里胡哨&#xff0c;解题在最下面 write 与博主不同&#xff0c;我通过…

对标 GPT-4?科大讯飞刘庆峰:华为GPU技术能力已与英伟达持平

科大讯飞创始人、董事长刘庆峰在亚布力中国企业家论坛第十九届夏季高峰会上透露了关于自家大模型进展的一些新内容。刘庆峰认为&#xff0c;中国在人工智能领域的算法并没有问题&#xff0c;但是算力方面似乎一直被英伟达所限制。 以往的“百模大战”中&#xff0c;训练大型模型…

国产当自强!深圳触觉智能「全国产化主板」大盘点(二)

上期我们给大家盘点了RK3568国产主板&#xff0c;本期为大家盘点的是深圳触觉智能RK3566系列产品&#xff0c;话不多说&#xff0c;上干货&#xff01; RK3566系列 深圳触觉智能 IDO-SOM3566 核心板 IDO-SOM3566-V1采用 Rockchip 新一代 64 位处理器 RK3566&#xff08;Q…

计算机毕设 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 今天学长向大家介绍一个机器视觉的毕设项目&#xff0c;二维码 / 条形码检测与识别 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 1 二维码检测 物体检…

【计算机基础】一文搞清楚什么是线程/进程/协程

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

SocketTools.NET 11.0.2148.1554 Crack

添加新功能以简化使用 URL 建立 TCP 连接的过程。 2023 年 8 月 23 日 - 12:35新版本 特征 添加了“HttpGetTextEx”函数&#xff0c;该函数在返回字符串缓冲区中的文本内容时提供附加选项。添加了对“FileTransfer”.NET 类和 ActiveX 控件中的“GetText”和“PutText”方法的…

算法leetcode|73. 矩阵置零(rust重拳出击)

文章目录 73. 矩阵置零&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a;进阶&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 73. 矩阵置零&#xff1a; 给定一个 m x n 的矩…

Springboot+mybatis-plus+dynamic-datasource+Druid 多数据源 分布式事务

Springbootmybatis-plusdynamic-datasourceDruid 多数据源事务&#xff0c;分布式事务 文章目录 Springbootmybatis-plusdynamic-datasourceDruid 多数据源事务&#xff0c;分布式事务0.前言1. 基础介绍ConnectionFactoryAbstractRoutingDataSource 动态路由数据源的抽象类 Dyn…

C++中数组作为参数进行传递方法

文章目录 基础&#xff1a;数组作为函数形参示例&#xff1a;1、一维数组的传递&#xff08;1&#xff09;直接传递&#xff08;2&#xff09;指针传递&#xff08;3&#xff09;引用传递 2、二维数组的传递&#xff08;1&#xff09;直接传递&#xff08;2&#xff09;指针传递…

华为云Stack的学习(二)

三、华为云Stack产品组件 FunsionSphere CPS 提供云平台的基础管理和业务资源&#xff08;包括计算资源和存储资源&#xff09;。采用物理服务器方式部署在管理节点。可以做集群的配置&#xff0c;扩容和运维管理。 Service OM 提供云服务的运维能力&#xff0c;采用虚拟化方…

【Java架构-包管理工具】-Maven进阶(二)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具&#xff0c;在此咱们由浅入深&#xff0c;分三篇文章&#xff08;Maven基础、Maven进阶、私服搭建&#xff09;来深入学习Maven&#xff0c;此篇为开篇主要介绍Maven进阶知识&#xff0c;包含坐标、依赖、仓库、生…

网络地址转换NAT-动态NAT的使用范围和配置-思科EI,华为数通

网络地址转换NAT-动态NAT的使用范围和配置 什么是动态NAT&#xff1f; 使用公有地址池&#xff0c;并以先到先得的原则分配这些地址。当具有私有 IP 地址的主机请求访问 Internet 时&#xff0c;动态 NAT 从地址池中选择一个未被其它主机占用的 IP 地址一对一的转化。当数据会话…

Go几种读取配置文件的方式

比较有名的方案有 使用viper管理配置[1] 支持多种配置文件格式&#xff0c;包括 JSON,TOML,YAML,HECL,envfile&#xff0c;甚至还包括Java properties 支持为配置项设置默认值 可以通过命令行参数覆盖指定的配置项 支持参数别名 viper[2]按照这个优先级&#xff08;从高到低&am…

Linux驱动 - 20230828

练习. 驱动代码&#xff1a; #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/cdev.h> #include <linux/device.h> #include <linux/slab.h> #include <linux/uaccess.h> #include <…

Viobot硬件组成和接口

Viobot主要由主板、传感器板和外壳组成。具体尺寸可以在用户手册上面找到。 传感器板上面是双目摄像头和IMU&#xff0c;摄像头已经打了胶固定在外壳的前脸&#xff0c;由于涉及到传感器外参标定&#xff0c;所以不可自行拆卸。 LED补光灯版本&#xff1a; TOF版本&#xff1a…

2023-8-28 n-皇后问题

题目链接&#xff1a;n-皇后问题 第一种搜索顺序 #include <iostream>using namespace std;const int N 20;int n; char g[N][N]; bool row[N], col[N], dg[N], udg[N];void dfs(int x, int y, int s) {if(y n) y 0, x ;if(x n){if(s n){for(int i 0; i < n;…

【 Python 全栈开发 - 人工智能篇 - 45 】集成算法与聚类算法

文章目录 一、集成算法1.1 概念1.2 常用集成算法1.2.1 Bagging1.2.2 Boosting1.2.2.1 AdaBoost1.2.2.2 GBDT1.2.2.3 XgBoost 1.2.3 Stacking 二、聚类算法2.1 概念2.2 常用聚类算法2.2.1 K-means2.2.2 层次聚类2.2.3 DBSCAN算法2.2.4 AP聚类算法2.2.5 高斯混合模型聚类算法 一、…