点击查看html编辑器说明文档

表格固定第一行和头两列(双向滚动条)edit icon

|
|
Fork(复制)
|
|

👉 新版编辑器已上线,点击进行体验吧!

BUG反馈
嵌入
设置
下载
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> <link href="https://lf9-...
展开
</head>
<body>
            
            <div style="margin:0 auto">
    <p>
    <h2>设备基础信息</h2>
    </p>
    <div class="Tab">
        <div class="title"> <a href="#" id="tab1" class="select-y" onclick="Tab('#tab1','#content1')"><span>基础信息</span></a> <a href="#" id="tab2" class="select-n" onclick="Tab('#tab2','#content2')"><span>设备档案</span></a>
        </div>
        <div class="tabcon">
            <ul id="content1">
                <div class="table-container">
                    <table>
                        <thead>
                            <tr id='the_head'>
                            </tr>
                        </thead>
                        <tbody>
                        </tbody>
                    </table>
                </div>
            </ul>
            <ul id="content2" style="display:none">
                <li><a href="#" target="_blank">CSS+Js制作的抽屉式菜单</a></li>
                <li><a href="#" target="_blank">4个简洁实用的CSS横向菜单,带搜索框</a></li>
                <li><a href="#" target="_blank">OpenCart 开源PHP网店 v1.4.94</a></li>
            </ul>
        </div>
    </div>
</div>
        
编辑器加载中
</body>
CSS
格式化
            
            .Tab .title {
    height: 30px;
    padding-left: 10px;
    background-color: #FFCAC1
}

.Tab .title div {
    display: block;
    height: 100%
}

.Tab .select-y {
    background-color: #FFEBE7;
}

.Tab .select-n {
    background-color: #FFFFFF;
}

.Tab .title .select-y,
.Tab .title .select-n {
    height: 26px;
    line-height: 26px;
    display: block;
    float: left;
    text-align: center;
    padding-left: 12px;
    margin-top: 4px;
    margin-left: 1px;
    color: #333;
    text-decoration: none;
    border-radius: 5px 5px 0 0
}

.Tab .title .select-y span,
.Tab .title .select-n span {
    display: block;
    padding-right: 12px
}

.tabcon ul {
    margin: 5px auto;
    padding: 0
}

.tabcon ul li {
    height: 24px;
    line-height: 24px;
    padding-left: 16px;
    overflow: hidden;
    display: block
}

.table-container {
    width: 100%;
    /*max-height: 300px;*/
    height: 390px;
    overflow: scroll;
}

table {
    border-collapse: collapse;
    /*white-space: nowrap; 文字不换行 */
    font-size: 15px;
}

thead tr th {
    outline: #fff solid 1px;
    /* 设置外轮廓,防止下层表格漏出 */
    background-color: #f2f2f2;
    text-align: center;
    position: -webkit-sticky;
    /* Safari */
    position: sticky;
    top: 0;
    z-index: 2;
}

.fixed-header.fixed-column {
    left: 0;
    z-index: 4;
    /* 设置最高,确保在其他所有单元格之上 */
}

.fixed-header:not(.fixed-column) {
    z-index: 3;
    /* 确保在可滚动列之上 */
}

.fixed-column {
    border: none;
    outline: #fff solid 1px;
    background-color: #e9e9e9;
    position: -webkit-sticky;
    /* Safari */
    position: sticky;
    left: 0;
    z-index: 1;
    /* 确保在固定标题下方,但在可滚动单元格上方 */
}

.col-1 {
    /* 设置第一列宽度 */
    min-width: 80px;
    text-align: center;
}

.fixed-column:nth-child(2) {
    left: 80px;
    /* 根据第一个固定格的宽度进行调整 */
}

tbody td,
thead th {
    padding: 8px;
    border: 1px solid #ddd;
    text-align: left;
}

/* Adjust the widths as needed 根据需要调整宽度 */
.fixed-column {
    width: 100px;
    /* 调整固定列的宽度 */
}

/* Optional: Add some spacing between columns for better readability 可选:在列之间添加一些间距以提高可读性 */
th,
td {
    white-space: nowrap;
    /* 防止文本换行 */
}
        
编辑器加载中
JS
格式化
            
            $(document).ready(function() {
    // 点击后,展示_收缩 子单元
    $(this).on("click", ".bi", function() {
        // alert("点击了bi");
        var table_arr = table_json["baseinfo"];
        console.log(table_arr);
        var this_id = $(this).parent().prev().text(); // 获取点击行的id(即子单元的pId)。  .parent()获取父节点,.prev()获取上一个兄弟元素
        var child_class = "child" + this_id; // 例:child1
        var $child = $("." + child_class);

        if ($(this).hasClass("bi-caret-right-fill")) { // 可展开
            $(this).removeClass("bi-caret-right-fill").addClass("bi-caret-down-fill"); // 变为可收缩
            if ($(this).parent().parent().next().hasClass(child_class)) { // 如果存在child_class,直接展示
                $child.show();
            } else { // 加载子单元数据表格 child_tr
                var child_tr = get_son(this_id, child_class);
                $(this).parent().parent().after(child_tr);
            }
        } else if ($(this).hasClass("bi-caret-down-fill")) { // 隐藏子单元
            $(this).removeClass("bi-caret-down-fill").addClass("bi-caret-right-fill");
            $child.hide();
        }
    });

    // 渲染表格表头
    var table_head_str = "";
    for (var key_head in table_json["head_line"]) {
        if (key_head == "id") {
            table_head_str += "<th class='fixed-header fixed-column col-1'>" + table_json['head_line'][key_head] + "</th>";
        } else if (key_head == "name") {
            table_head_str += "<th class='fixed-header fixed-column'>" + table_json['head_line'][key_head] + "</th>";
        } else {
            table_head_str += "<th class='fixed-header'>" + table_json['head_line'][key_head] + "</th>";
        }
    }
    $("#the_head").append(table_head_str);

    // 渲染表格内容(不加载子单元)
    var table_info_str = "";
    var table_arr = table_json["baseinfo"];
    // console.log(table_arr);
    for (var i = 0; i < table_arr.length; i++) {
        // console.log(table_json["baseinfo"][i]);
        // console.log(id_td);

        if (table_arr[i]["pId"] == "0") { // 是设备
            var name_td = "";
            var id_td = "<td class='fixed-column col-1'>" + table_arr[i]['id'] + "</td>";
            var equ_site_td = "<td>" + table_arr[i]['equ_site'] + "</td>";
            var model_td = "<td>" + table_arr[i]['model'] + "</td>";
            var equ_type_td = "<td>" + table_arr[i]['equ_type'] + "</td>";
            var p_No_td = "<td>" + table_arr[i]['p_No'] + "</td>";
            var last_date_td = "<td>" + table_arr[i]['last_date'] + "</td>";
            var next_date_td = "<td>" + table_arr[i]['next_date'] + "</td>";
            var p_date_td = "<td>" + table_arr[i]['p_date'] + "</td>";
            var u_date_td = "<td>" + table_arr[i]['u_date'] + "</td>";
            var img_form_td = "<td>" + table_arr[i]['img_form'] + "</td>";
            var img_nameplate_td = "<td>" + table_arr[i]['img_nameplate'] + "</td>";

            if (table_arr[i]["has_child"] == "yes") { //设备,含子单元
                name_td = "<td class='fixed-column'><i class='bi bi-caret-right-fill'></i>" + table_arr[i]['name'] + "</td>";
            } else { //设备,不含子单元
                name_td = "<td class='fixed-column'><i class='bi bi-caret-down'></i>" + table_arr[i]['name'] + "</td>";
            }
            table_info_str += "<tr>" + id_td + name_td + equ_site_td + model_td + equ_type_td + p_No_td + last_date_td + next_date_td + p_date_td + u_date_td + img_form_td + img_nameplate_td + "</tr>";
        }
    }
    // console.log(table_info_str);
    $("table tbody").append(table_info_str);
});

// 设备数据,可用ajax从服务器获取
var table_json = {
    "head_line": {
        "id": "ID",
        "name": "名称",
        "equ_site": "所属站点、装置",
        "model": "型号",
        "equ_type": "类别",
        "p_No": "产品编号",
        "last_date": "上次检验日期",
        "next_date": "下次检验日期",
        "p_date": "出厂日期",
        "u_date": "投用日期",
        "img_form": "整体外观",
        "img_nameplate": "铭牌"
    },
    "baseinfo": [{
            "pId": "0",
            "has_child": "yes",
            "id": "1",
            "name": "原料气分离器",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "压力容器",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2024.12.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "0",
            "has_child": "no",
            "id": "2",
            "name": "红页1井生产分离器",
            "equ_site": "红页1井站",
            "model": "XXXX-XXXX",
            "equ_type": "压力容器",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2024.12.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "3",
            "name": "左侧安全阀",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "安全阀",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "7",
            "name": "左侧压力表",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "压力表",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "8",
            "name": "右侧压力表",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "压力表",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "9",
            "name": "入口阀门",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "其他阀",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "10",
            "name": "排污前阀",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "其他阀",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "11",
            "name": "排污后阀",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "其他阀",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "12",
            "name": "左侧安全阀前阀",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "其他阀",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "13",
            "name": "左侧安全阀后阀",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "其他阀",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "5",
            "has_child": "no",
            "id": "6",
            "name": "安全阀",
            "equ_site": "红页1井站",
            "model": "XXXX-XXXX",
            "equ_type": "安全阀",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "0",
            "has_child": "yes",
            "id": "5",
            "name": "红页1井计量分离器",
            "equ_site": "红页1井站",
            "model": "XXXX-XXXX",
            "equ_type": "压力容器",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2024.12.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        },
        {
            "pId": "1",
            "has_child": "no",
            "id": "4",
            "name": "右侧安全阀",
            "equ_site": "30万脱硫装置",
            "model": "XXXX-XXXX",
            "equ_type": "安全阀",
            "p_No": "XXXX-XXXX",
            "last_date": "2024.6.30",
            "next_date": "2025.6.30",
            "p_date": "2000.1.1",
            "u_date": "2000.5.30",
            "img_form": "/baseinfo/XXXXX.img",
            "img_nameplate": "/baseinfo/XXXXX.img"
        }
    ]
};

// 工具栏tab,切换操作
function Tab(tab, content) {
    if ($(tab).hasClass("select-n")) {
        // alert($(tab).text());
        $(tab).removeClass("select-n").addClass("select-y");
        $(content).css("display", "block");
        $(tab).siblings().removeClass("select-y").addClass("select-n") // .siblings()为获取同级其他元素
        $(content).siblings().css("display", "none");
    }
}

// 获取子单元数据
function get_son(pId, myclass) {
    var table_arr = table_json["baseinfo"];
    var child_tr = "";
    for (var i = 0; i < table_arr.length; i++) {
        if (table_arr[i]["pId"] == pId) { // pId为选中行的id
            var name_td = "<td class='fixed-column' style='padding-left: 30px;'><i class='bi bi-x'></i>" + table_arr[i]['name'] + "</td>";
            var id_td = "<td class='fixed-column col-1'>" + table_arr[i]['id'] + "</td>";
            var equ_site_td = "<td>" + table_arr[i]['equ_site'] + "</td>";
            var model_td = "<td>" + table_arr[i]['model'] + "</td>";
            var equ_type_td = "<td>" + table_arr[i]['equ_type'] + "</td>";
            var p_No_td = "<td>" + table_arr[i]['p_No'] + "</td>";
            var last_date_td = "<td>" + table_arr[i]['last_date'] + "</td>";
            var next_date_td = "<td>" + table_arr[i]['next_date'] + "</td>";
            var p_date_td = "<td>" + table_arr[i]['p_date'] + "</td>";
            var u_date_td = "<td>" + table_arr[i]['u_date'] + "</td>";
            var img_form_td = "<td>" + table_arr[i]['img_form'] + "</td>";
            var img_nameplate_td = "<td>" + table_arr[i]['img_nameplate'] + "</td>";
            child_tr += "<tr class='" + myclass + "'>" + id_td + name_td + equ_site_td + model_td + equ_type_td + p_No_td + last_date_td + next_date_td + p_date_td + u_date_td + img_form_td + img_nameplate_td + "</tr>"
        }
    }
    return child_tr;
}
        
编辑器加载中
预览
控制台
清空