layui table 自定义表头

news2025/1/16 17:06:50

自定义表头-查询

js/css静态文件引用

<!-- 引入 layui.css -->
<link href="//unpkg.com/layui@2.9.16/dist/css/layui.css" rel="stylesheet">
<!-- 引入 layui.js -->
<script src="//unpkg.com/layui@2.9.16/dist/layui.js"></script>

html

<script type="text/html" id="sex">
    {{#  if(d.sex == 10){ }}
       男
    {{# }else if(d.sex == 20) { }}
       女
    {{# }else{ }}
       未知
    {{# } }}
</script>
<table class="layui-hide" id="tableDemo"></table>

javascript

<script>
    layui.use(function () {
        var filters = {};  // 保存每个输入框的值
        var form = layui.form;
        var table = layui.table;
        var laydate = layui.laydate;
        var dropdown = layui.dropdown;
        table.render({
            elem: '#tableDemo',
            method: "post",
            //url: '', //如果要访问后台,改成你的api地址即可
            //where: { p1: p1, p2: p2, p3: p3},//切换成你的请求实体对象
            cols: [[
                { field: 'id', title: 'ID', width: 80, sort: true, fixed: true },
                { field: 'username', title: '用户', width: 120, fixed: true },
                { field: 'sign', title: '签名', width: 160 },
                { field: 'sex', title: '性别', width: 80, templet: '#sex' },
                { field: 'city', title: '城市', width: 100 },
                { field: 'experience', title: '积分', width: 80, sort: true }
            ]],
            data: [{ // 赋值已知数据
                "id": "10001",
                "username": "张三1",
                "sex": "10",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "116"
            }, {
                "id": "10002",
                "username": "张三2",
                "sex": "",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "12",
            }, {
                "id": "10003",
                "username": "张三3",
                "sex": "10",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "65"
            }, {
                "id": "10004",
                "username": "张三4",
                "sex": "20",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "777"
            }, {
                "id": "10005",
                "username": "张三5",
                "sex": "20",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "86"
            }, {
                "id": "10006",
                "username": "张三6",
                "sex": "10",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "12"
            }, {
                "id": "10007",
                "username": "张三7",
                "sex": "20",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "16"
            }, {
                "id": "10008",
                "username": "张三8",
                "sex": "10",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "106"
            }],
            scrollX: true,  // 启用横向滚动
            fixed: true,
            page: false,
            done: function (res, curr, count) {
                loadCustomSearch(res);
            }
        });

        ///初始化查询条件
        function loadCustomSearch(response) {
            //这个务必保留 由于使用了flexd layui原理是两个相同的,所以如果不加这个,flexd的列会出现错行
            var fixedHeader = document.querySelectorAll('.layui-table-fixed thead th');
            fixedHeader.forEach(function (item, index) {
                var width = item.offsetWidth - 2 + 'px';
                if (item.querySelector('input') === null) {
                    //用户
                    if (index == 1) {
                        generateSearchByText("", width, "username", item);
                    }
                    //签名
                    if (index == 2) {
                        generateSearchByText("", width, "sign", item);
                    }
                }
            });

            var th = document.querySelectorAll('thead th');
            th.forEach(function (item, index) {
                var width = item.offsetWidth - 2 + 'px';
                if (item.querySelector('input') === null) {
                    //用户
                    if (index == 1) {
                        generateSearchByText("", width, "username", item);
                    }
                    //签名
                    if (index == 2) {
                        generateSearchByText("", width, "sign", item);
                    }
                    // if (index == 4) {
                    //     generateSearchByDateRange("", "98px", "Create_Date", "Create_DateStart", "Create_DateEnd", item, "date");
                    // }
                }
                if (item.querySelector('select') === null) {
                    //性别
                    if (index == 3) {
                        generateSearchBySelect("", width, "sex", item, 0);
                    }
                }
            });

            // 重新计算布局
            table.resize('tableDemo');
        }

        ///生成文本框的查询条件
        function generateSearchByText(placeHolder, width, name, item) {
            var input = document.createElement('input');
            input.name = name;
            input.type = 'text';
            input.placeholder = placeHolder;
            input.style.width = width;
            input.style.fontWeight = "normal";
            // 如果之前保存了该列的输入内容,填充到输入框中
            if (filters[name]) {
                input.value = filters[name];
            }
            item.appendChild(input);
            // 绑定事件
            input.addEventListener('change', function (e) {
                var searchValue = e.target.value;
                // 保存当前输入框的值
                filters[name] = searchValue;
                searchChange();
            });
        }

        ///生成时间区间查询条件
        function generateSearchByDateRange(placeHolder, width, dvName, startName, endName, item, type) {
            let newWidth = width - 6;
            // 创建时间区间控件的容器
            var container = document.createElement('div');
            container.id = dvName;
            container.style.display = 'flex';
            container.style.alignItems = 'center';

            // 创建开始日期输入框
            var startInput = document.createElement('input');
            startInput.id = startName;
            startInput.placeholder = '开始日期';
            startInput.style.width = width;
            startInput.style.fontWeight = "normal";

            // 创建结束日期输入框
            var endInput = document.createElement('input');
            endInput.id = endName;
            endInput.placeholder = '结束日期';
            endInput.style.width = width;
            endInput.style.fontWeight = "normal";

            if (filters[startName]) {
                startInput.value = filters[startName];
            }

            if (filters[endName]) {
                endInput.value = filters[endName];
            }

            container.appendChild(startInput);
            container.appendChild(document.createTextNode(' - ')); // 添加一个分隔符
            container.appendChild(endInput);
            item.appendChild(container);

            // 使用 laydate.render 绑定时间区间控件
            laydate.render({
                elem: '#' + dvName,
                type: type,
                fullPanel: true, // 2.8+
                range: ['#' + startName, '#' + endName],
                rangeLinked: true,
                min: minDate,
                max: maxDate,
                done: function (value, date, endDate) {
                    // 确保值不为空且包含 " - "
                    if (value && value.includes(' - ')) {
                        var dates = value.split(' - ');  // 分割成开始日期和结束日期

                        var startDate = dates[0];  // 获取开始日期
                        var endDate = dates[1];  // 获取结束日期
                        filters[startName] = startDate;
                        filters[endName] = endDate;
                        document.getElementById(startName).value = startDate;
                        document.getElementById(endName).value = endDate;
                    }
                    searchChange();
                }
            });
        }

        ///生成下拉框的查询条件
        function generateSearchBySelect(placeHolder, width, name, item, type) {
            // 创建 select 下拉菜单
            var select = document.createElement('select');
            select.id = name;
            select.name = name;
            select.style.width = width;
            select.style.display = "block";
            select.style.fontWeight = "normal";
            //禁用layui的select组件样式渲染
            //不适用此属性的时候,页面会出现先展示layui的select,后展示原生的select组件
            //此属性开启,则默认不适用layui的select样式
            select.setAttribute('lay-ignore', true);
            select.add(new Option("", ""));
            select.add(new Option("男", "10"));
            select.add(new Option("女", "20"));
            if (filters[name]) {
                select.value = filters[name];
            }

            item.appendChild(select);

            $(select).on('change', function () {
                var selectedValue = $(this).val();
                // 保存当前输入框的值
                filters[name] = selectedValue;
                searchChange();
            });
        }

        //列头查询事件
        function searchChange() {
            table.reload('tableDemo', {
                where: {  // 添加查询条件
                    dto: sureEntity
                },
                page: false,
                done: function (res, curr, count) {
                    loadCustomSearch(res);
                }
            });
        }
    });
</script>

表头弹tip信息

javascript

        table.render({
            elem: '#tableDemo',
            method: "post",
            //url: '', //如果要访问后台,改成你的api地址即可
            //where: { p1: p1, p2: p2, p3: p3},//切换成你的请求实体对象
            cols: [[
                { field: 'id', title: 'ID', width: 80, sort: true, fixed: true },
                { field: 'username', title: '用户', width: 120, fixed: true },
                { field: 'sign', title: '签名', width: 160 },
                { field: 'sex', title: '性别', width: 80, templet: '#sex' },
                { field: 'city', title: '城市', width: 100 },
                { field: 'experience', title: '积分', width: 80, sort: true }
            ]],
            data: [{ // 赋值已知数据
                "id": "10001",
                "username": "张三1",
                "sex": "10",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "116"
            }, {
                "id": "10002",
                "username": "张三2",
                "sex": "",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "12",
            }, {
                "id": "10003",
                "username": "张三3",
                "sex": "10",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "65"
            }, {
                "id": "10004",
                "username": "张三4",
                "sex": "20",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "777"
            }, {
                "id": "10005",
                "username": "张三5",
                "sex": "20",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "86"
            }, {
                "id": "10006",
                "username": "张三6",
                "sex": "10",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "12"
            }, {
                "id": "10007",
                "username": "张三7",
                "sex": "20",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "16"
            }, {
                "id": "10008",
                "username": "张三8",
                "sex": "10",
                "city": "浙江杭州",
                "sign": "人生恰似一场修行",
                "experience": "106"
            }],
            scrollX: true,  // 启用横向滚动
            fixed: true,
            page: false,
            done: function (res, curr, count) {
                var tipContent = "我是自定义Tip信息";
                $('.layui-table tr').each(function (index, item) {
                    var nameCell = $(item).find('th').eq(1);
                    let nIndex;
                    nameCell.on('mouseenter', function () {
                        nIndex = layer.tips(tipContent, this, {
                            tips: [1, "#3A3D49"],
                        });
                    });
                    nameCell.on('mouseleave', function () {
                        layer.close(nIndex);
                    });
                });
                
            }
        });

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

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

相关文章

【C++打怪之路Lv9】-- vector

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;重生之我在学Linux&#xff0c;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持…

Flink系统架构和应用部署方式

目录 概述 Flink集群架构组件 Client JobManager TaskManagers 算子、Task和Subtask三者关系 概念 算子和Task的关系 Task和SubTask的关系 算子和SubTask的关系 样例 Task Slots和资源的关系 Flink应用程序部署 Flink Session 集群 Flink Job 集群 Flink Appli…

「Java服务」快速接入SkyWalking方法指南

一、背景 背景&#xff1a;Apache SkyWalking 是一个开源的分布式应用性能监控&#xff08;APM&#xff09;系统&#xff0c;主要用于监控微服务、云原生和容器化应用的性能。接入SkyWalking可以排查以智能投放服务为主的服务响应问题 技术架构 SkyWalking 的核心架构包括以…

[含文档+PPT+源码等]精品基于ssm实现的原生微信小程序线上养花系统的设计与实现

基于SSM&#xff08;Spring、SpringMVC、MyBatis&#xff09;实现的原生微信小程序线上养花系统的设计与实现背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、选题背景 随着人们生活水平的提高和环境保护意识的增强&#xff0c;养花已经成为一种流行的休闲活动。…

UE5 猎户座漂浮小岛 04 声音 材质

UE5 猎户座漂浮小岛 04 声音 材质 1.声音 1.1 导入 wav格式 1.2 循环播放 1.3 mp3转wav 1.4 新手包素材&#xff08;火焰 &#xff09; particle&#xff1a;颗粒 2.材质 2.1 基本颜色 M_Yellow 2.2 混合模式与双面材质 2.3 金属感、高光、粗糙度 M_AluminumAlloy 2.4 自…

【JAVA毕业设计】基于Vue和SpringBoot的课程管理平台

本文项目编号 T 006 &#xff0c;文末自助获取源码 \color{red}{T006&#xff0c;文末自助获取源码} T006&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 数据库设计 六、…

CyberRt实践之Hello Apollo(Apollo 9.0版本)

apollo9.0环境安装参考官方网站 apollo.baidu.com/community/Apollo-Homepage-Document?docBYFxAcGcC4HpYIbgPYBtXIHQCMEEsATAV0wGNkBbWA5UyRFdZWVBEAU0hFgoIH0adPgCY%2BADwCiAVnEAhAILiAnABZxEgOzK1Y%2BQA51M3ROUnJBsbK2WZoyUdkBhcXoAMhlwDFlARnUXZdzE9AGY%2BbFINADYpUhCEFW…

(Java企业 / 公司项目)阿里云aliyun-对象存储OSS详细从开通到配置(微服务架构选用)

OSS配置文档 注册阿里云账号 https://www.aliyun.com/ 注册成功登录阿里云。 配置bucket 进入控制台&#xff1a; 搜索OSS 点击上图中控制台“对象存储OSS”&#xff0c;立即创建Bucket: 点击“立即创建”&#xff0c;填写bucket的信息&#xff0c;如下图&#xff1a; 注意…

机器学习拟合过程

import numpy as np import matplotlib.pyplot as plt# 步骤1: 生成模拟数据 np.random.seed(0) X 2 * np.random.rand(100, 1) y 4 3 * X 2 * X**2 np.random.randn(100, 1)# 步骤2: 定义线性模型 (我们从随机权重开始) w np.random.randn(2, 1) b np.random.randn(1)#…

C++11中的原子操作及其底层缓存一致性

C中的原子变量&#xff08;atomic variables&#xff09;是一种并发编程中用于保证数据一致性和线程安全的机制。在多线程环境下&#xff0c;当多个线程同时访问或修改同一个变量时&#xff0c;可能会产生竞争条件&#xff08;race condition&#xff09;&#xff0c;导致未定义…

Javascript 使用 Jarvis 算法或包装的凸包(Convex Hull using Jarvis’ Algorithm or Wrapping)

给定平面中的一组点&#xff0c;该集合的凸包是包含该集合所有点的最小凸多边形。 我们强烈建议您先阅读以下文章。 如何检查两个给定的线段是否相交&#xff1f; c https://blog.csdn.net/hefeng_aspnet/article/details/141713655 java https://blog.csdn.net/hefeng_aspne…

C#中判断的应用说明二(switch语句)

一.判断的定义说明 判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。下面是大多数编程语言中典型的判断结构的一般形式&#xff1a; 二.判…

六、设置弹窗显示队列

实现原理&#xff1a; 把弹窗放置在一个队列中&#xff0c;通过设置UI方法&#xff0c;直接调用这个队列中的文本 Queue是一个先进先出的队列。 一、队列的使用 写一个增加提示的方法 在这里使用锁来执行这个语句&#xff0c;向这个队列里面增加一个提示文本 在这里进行文本…

Llama3-Factory模型部署新手指南

一、介绍 为了保持其公司在人工智能开源大模型领域的地位&#xff0c;社交巨头Meta推出了旗下最新开源模型。当地时间4月18日&#xff0c;Meta在官网上宣布公布了旗下最新大模型Llama 3。目前&#xff0c;Llama 3已经开放了80亿&#xff08;8B&#xff09;和700亿&#xff08;…

报表控件stimulsoft操作:使用 Stimulsoft 产品连接到 Json数据源

我们继续我们的系列文章&#xff0c;介绍如何在 Stimulsoft 产品中连接各种类型的数据源。在上一篇文章中&#xff0c;我们讨论了如何连接 OData。今天&#xff0c;我们将深入研究另一种类型的数据源 - JSON。 Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate…

Bat To Exe Converter软件:将批处理文件bat转换成exe应用程序

Bat To Exe Converter软件&#xff1a; 将批处理文件bat转换成exe应用程序&#xff08;文章最后附软件下载地址&#xff09;Bat To Exe Converter软件可以把批处理文件bat转换为exe可执行文件&#xff0c;甚至运用密码保护文件&#xff0c;生成的.EXE是独立的文件&#xff0c;…

DevExpress WinForms中文教程:Data Grid - 如何点击获取信息?

在使用DevExpress WinForms的Data Grid之类控件时&#xff0c;可能需要实现自定义用户交互&#xff0c;例如显示数据行的上下文菜单&#xff0c;或者在双击一行时调用编辑表单。在这些情况下&#xff0c;您需要在指定的坐标处标识网格元素。 在本教程中&#xff0c;您将学习如…

Python案例 | 使用K-means 聚类算法提取图像中的颜色

假如我们需要提取下图中的颜色&#xff0c;可以通过使用 K-means 聚类算法对图像进行颜色聚类分析&#xff0c;并生成一个基于聚类中心(即最具代表性的颜色)的RGB值和调色板。 # 通过使用 K-means 聚类算法对图像进行颜色聚类分析&#xff0c;并生成一个基于聚类中心(即最具代…

时间序列预测(二)——前馈神经网络(Feedforward Neural Network, FNN)

上一篇文章有提到线性回归方程。 时间序列预测&#xff08;二&#xff09;——前馈神经网络&#xff08;Feedforward Neural Network, FNN&#xff09;-CSDN博客 与线性回归相比&#xff1a; 线性回归只有一个线性层&#xff0c;输入直接映射到输出&#xff0c;不包含隐藏层…