js、css实现table表头固定

原生table表头随表体一起上下滚动
在html中利用js、css将表头固定,可将原table拆分,分为表头table,表体table。
大致框架如:

<!--整体table-->
<table> 
    <tr>
        <td>
            <!--表头table-->
            <table>
                <!--只存放表头-->
                <th></th>
                <th></th>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <!--表体table-->
            <table>
                <!--存放表数据-->
                <tr>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                </tr>
            </table>
        </td>
    </tr>
</table>

但是,这种情况适合没有滚动条的情况,一旦出现滚动条,则表头和表体会有偏离。因此,我们可以在开始的时候根据滚动条的宽度来用css设置表头的偏离位置。
代码如下:

<html>
<head>
    <title>
    </title>
    <style>
    .table th,.table td{
        min-width:60px;
    }
    table{
         empty-cells:show; 
         border-collapse: collapse;
         margin:0 auto;
    }
     .scrolltable{overflow-x:hidden; overflow-y: scroll; width: 100%;}
    </style>

</head>
<body>

    <!--fixed thead begin-->
    <div style="margin-left: 10px; margin-right:0px; overflow-x: auto;">
        <table  width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td>
                    <div style="margin-left:10px;">
                        <table align="center" border="0"
                                style="font-size: 12px; margin-left: 0px; 
                                margin-bottom: 0px; margin-right: 16px;"
                                id="table1"
                                class="table table-bordered table-striped table-hover">
                            <tr>
                                <!-- 这里存放表头名称,例如:
                                    <th >用户号</th>               
                                -->
                            </tr>
                        </table>
                    </div>
                </td>
            </tr>
            <tr>
                <td align="center" width="100%">
                    <div style="overflow-y: auto;margin-left:0px;" 
                            align="center" class="scrolltable">
                        <table class="table table-bordered table-striped table-hover"
                                id="searchresult" style="font-size: 12px">
                            <thead id="thead" style="display: none;"></thead>
                            <!--
                                这里存放列表内容(后台获取的值 datalist)
                                    <tr>
                                        <td></td>
                                    </tr>
                                例如
                            -->
                        </table>
                    </div>
                </td>
            </tr>
        </table>
    </div>
    <!--fixed thead end-->
</body>
</html>

将其设置为居右16px;这个宽度基本上和滚动条的宽度一致,也可以自由设定
还需要js控制其宽度,若没有滚动条则居右0px;需要js检测表中div是否有滚动条
js代码:

$(function(){
    <!--获取屏幕高度-->
    var y = window.screen.availHeight;
    <!--设置滚动div高度-->
    document.getElementsByClassName("scrolltable")[0].style.height=y-400+"px";

    <!--获取表体行数-->
    var rows = document.getElementById("searchresult").rows.length;
    <!--获取表头行数-->
    var rows2 = document.getElementById("table1").rows.length;
    <!--如果结果存在的话-->
    if(rows > 0){
        <!--获取结果集的列数-->
        var cells = document.getElementById("searchresult").rows[0].cells.length;
        for(var i=0;i<cells;i++){   
            <!--循环遍历,将表体每列宽度赋值为表头对应列的宽度-->
            document.getElementById("table1").rows[0].cells[i].width
                            =document.getElementById("searchresult").rows[0].cells[i].offsetWidth;
        }
        <!--获取滚动区-->
        var obj = document.getElementById("datatable");
        if(obj.scrollHeight > obj.clientHeight || obj.offsetHeight > obj.clientHeight){
        }else{
            <!--如果没有滚动条,则居右0px-->
            document.getElementById("fixthead").style.marginRight = "0px";
        }
    }

})

若有不明,可以留言,原创,若转载请标明出处!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值