当前位置: 首页 > article >正文

使用html+css+layui实现动态表格组件

1、概述

需求,表格第一列指标可配置通过后端api传进来,表格显示数据以及鼠标触摸后气泡弹出层提示信息都是从后端传过来,实现动态表格的组件!!实现效果如下:

接口标准数据格式如下:

{
    "data": {
        "date": [
            "8.20",
            "8.21",
            "8.22",
            "8.23",
            "8.24",
            "8.25",
            "8.26",
            "8.27",
            "8.28",
            "8.29",
            "8.30",
            "8.31"
        ],
        "hosDays": [
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9",
            "10",
            "11",
            "12"
        ],
        "maxWidth": "",
        "tableData": {
            "中心静脉插管": [
                {
                    "id": "25",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "26",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "27",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "28",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "29",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "30",
                    "show": "<img style='width:20px;height:20px;' src='/pharmacistws/image/CENTER.jpg'/>",
                    "hide": ""
                },
                {
                    "id": "31",
                    "show": "<img style='width:20px;height:20px;' src='/pharmacistws/image/CENTER.jpg'/>",
                    "hide": ""
                },
                {
                    "id": "32",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "33",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "34",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "35",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "36",
                    "show": "",
                    "hide": ""
                }
            ],
            "血常规": [
                {
                    "id": "49",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "50",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "51",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "52",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "53",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "54",
                    "show": "<img style='width:20px;height:20px;' src='/pharmacistws/image/BLOOD.jpg'/>",
                    "hide": "<div><span style='color:black'>07:00 白细胞 mg <span style='color:red'>10↓</span>  (11~20) </span><br/><span style='color:black'>07:00 血小板 mg 100  (100~300) </span><br/><span style='color:black'>07:00 中性粒细胞 mg <span style='color:red'>10↓</span>  (11~20) </span><br/></div>"
                },
                {
                    "id": "55",
                    "show": "<img style='width:20px;height:20px;' src='/pharmacistws/image/BLOOD.jpg'/>",
                    "hide": "<div><span style='color:black'>07:00 白细胞 mg 12  (11~20) </span><br/><span style='color:black'>07:00 白细胞 mg 20  (11~20) </span><br/><span style='color:black'>07:15 血小板 mg <span style='color:red'>80↓</span>  (100~300) </span><br/><span style='color:black'>07:00 血红蛋白 mg <span style='color:red'>25↑</span>  (11~20) </span><br/><span style='color:black'>07:00 中性粒细胞 mg <span style='color:red'>8↓</span>  (11~20) </span><br/><span style='color:black'>07:00 中性粒细胞 mg 20  (11~20) </span><br/></div>"
                },
                {
                    "id": "56",
                    "show": "<img style='width:20px;height:20px;' src='/pharmacistws/image/BLOOD.jpg'/>",
                    "hide": "<div><span style='color:green'>未见异常</span></div>"
                },
                {
                    "id": "57",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "58",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "59",
                    "show": "",
                    "hide": ""
                },
                {
                    "id": "60",
                    "show": "",
                    "hide": ""
                }
            ]
        }
    },
    "r_code": 1
}

 2、实现代码

js代码

// 渲染表格数据
function renderTable(eleIdName, eleIdName1, eleIdName2,data) {
    var tableHeader = document.querySelector(eleIdName);
    var dayNum = document.querySelector(eleIdName1);
    var tableHide = document.getElementById(eleIdName2);
    // 渲染列头
    for (var i = 0; i < data.date.length; i++) {
        var headerCell = document.createElement('div');
        headerCell.classList.add('header-cell');
        headerCell.textContent = data.date[i];
        tableHeader.appendChild(headerCell);

        var headerCell1 = document.createElement('div');
        headerCell1.classList.add('header-cell');
        headerCell1.textContent = data.hosDays[i];
        dayNum.appendChild(headerCell1);
    }
    // 渲染数据
    var dataHtml = '';
    for (var key in data.tableData) {
        dataHtml += '<div class="table-row">';
        dataHtml += '<div class="cell">';
        dataHtml += key;
        dataHtml += '</div>';
        for (var i = 0; i < data.tableData[key].length; i++) {
            dataHtml += '<div class="cell" id="'+data.tableData[key][i].id+'" onmouseover="tableShow('+data.tableData[key][i].id+')" onmouseout="tableCloseTip()">';
            dataHtml += data.tableData[key][i].show;
            dataHtml += '</div>';
            var newElement = document.createElement('div');
            newElement.id= "hide_"+data.tableData[key][i].id;
            newElement.innerHTML = data.tableData[key][i].hide;
            tableHide.appendChild(newElement);
        }
        dataHtml += '</div>';
    }
    dayNum.insertAdjacentHTML('afterend', dataHtml);
}

function tableShow(d) {
    layui.use(['layer'],function(){
        var layer = layui.layer;
        var hide = document.getElementById("hide_"+d);
        if(hide.innerHTML!=='') {
            tips = layer.tips(hide.innerHTML, "#"+d, {
                tips: [1, '#F8F8F8'],
                area: ['300px','auto'],
                time: 60000
            });
            // $("#layui-layer" + tips).css("position","fixed");
        }
    });
}

function tableCloseTip () {
    layui.use(['layer'],function(){
        var layer = layui.layer;
        layer.close(tips);
    });
}

如何使用

                var tableHtml = '            <div style="overflow-x: auto;">\n' +
                    '                <div class="table">\n' +
                    '                    <div class="table-header" id="tableHeader">\n' +
                    '                        <div class="header-cell">日期</div>\n' +
                    '                        <!-- 更多列头 -->\n' +
                    '                    </div>\n' +
                    '                    <div class="table-header" id="inHosDay">\n' +
                    '                        <div class="header-cell">住院日</div>\n' +
                    '                    </div>\n' +
                    '                    <!-- 更多单元格 -->\n' +
                    '                </div>\n' +
                    '                <div id="tableHide" style="display:none">\n' +
                    '\n' +
                    '                </div>\n' +
                    '            </div>'
                $("#table1").append(tableHtml);
                renderTable("#tableHeader","#inHosDay",'tableHide',ret.data);

注意需要引用layui组件


http://www.kler.cn/a/293922.html

相关文章:

  • 【121. 买卖股票的最佳时机】——贪心算法/动态规划
  • Pycharm PyQt5 环境搭建创建第一个Hello程序
  • 《DiffusionDet: Diffusion Model for Object Detection》ICCV2023
  • 【C++】类与对象的基础概念
  • scrapy爬取中信证券销售金融产品信息
  • 安全生产管理的重要性:现状、痛点与改进之路
  • MySQL报错:[Err] 1075 - Incorrect table definitionmysql
  • 提高开发效率的实用工具库VueUse
  • 【2024数模国赛赛题思路公开】国赛D题思路丨附可运行代码丨无偿自提
  • 数据仓库: 6- 数据仓库分层
  • AI模块在人工智能中扮演着什么样的角色
  • 【机器学习】朴素贝叶斯方法的概率图表示以及贝叶斯统计中的共轭先验方法
  • idea中配置Translation插件完成翻译功能
  • 视觉语言模型(VLMs)知多少?
  • C#基础(6)值类型和引用类型
  • 7.统一网关-Gateway
  • 前端跨域问题详解与解决方案指南
  • ArcGIS Pro SDK (十三)地图创作 3 特殊图层
  • 【优化】Nginx 配置页面请求不走缓存 浏览器页面禁用缓存
  • 深入探讨Go语言中的切片与数组操作
  • Mysql在线安全变更工具 gh-ost
  • iOS——持久化
  • adb devices找不到设备
  • 斯坦福UE4 C++课学习补充25:寻路EQS
  • Java入门:07.Java中的面向对象02
  • 【数据结构】排序算法系列——希尔排序(附源码+图解)