js实现html table 行,列锁定的简单实例

实现 HTML table 行、列锁定是一个比较常见的需求,可以很好地优化表格数据的可读性和易用性。下面是一个简单的实例说明如何用 JavaScript 实现 HTML table 行、列锁定。

实现思路

实现 HTML table 行、列锁定的思路很简单,就是通过改变 table 中每个单元格的 position 和 zIndex 来实现行、列的固定。

具体来说,就是通过鼠标滚动事件来检测 table 的位置,然后动态地改变每个单元格的 position 和 zIndex 属性。当 table 的左上角滚动出浏览器视窗时,固定行和列,通过设置单元格的 position 为 "fixed",并将其置于所有单元格之上,也就是设置其 zIndex 属性为更高。当 table 重新回到浏览器视窗中时,则释放行和列,将单元格的 position 和 zIndex 属性恢复原来的值。

代码示例

为了方便起见,在这里我们用 jQuery 作为 JavaScript 实现行、列锁定的工具。

$(document).ready(function(){
    var table = $('#mytable');

    // 获取顶部固定列和左侧固定行
    var fixedRows = table.find('tr:lt(3)');
    var fixedCols = table.find('tr td:nth-child(-n+3)');

    // 固定列的位置和 z-index
    fixedCols.each(function(){
        $(this).css({ 'position': 'fixed', 'z-index': '1' });
    });

    // 固定顶部行的位置和 z-index
    fixedRows.each(function(){
        $(this).find('td').css({ 'position': 'fixed', 'z-index': '2' });
    });

    // 滚动事件处理程序
    table.parent().scroll(function(){
        var scrollTop = $(this).scrollTop();
        var scrollLeft = $(this).scrollLeft();

        // 固定行和列,并设置其位置和 z-index
        fixedRows.each(function(){
            $(this).find('td').css({ 'left': scrollLeft+'px' });
        });

        fixedCols.each(function(){
            $(this).css({ 'top': scrollTop+'px' });
        });
    });
});

上面的代码实现了一个简单的行、列锁定效果,具有良好的可读性和易用性。你可以将其扩展为支持更多的表格功能,比如固定表头等。

下面是一个完整的示例,可以更好地说明 JavaScript 实现行、列锁定的过程。

<!DOCTYPE html>
<html>
<head>
    <title>Locking HTML Table Rows and Columns with JavaScript</title>
    <style>
        table {
            border-collapse: collapse;
        }
        td, th {
            padding: 5px;
            border: 1px solid black;
            background-color: #fff;
        }
        .locked-col {
            position: fixed;
            z-index: 1;
            background-color: #eee;
        }
        .locked-row {
            position: fixed;
            z-index: 2;
            background-color: #ddd;
        }
    </style>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <table id="mytable">
        <thead>
            <tr>
                <th></th>
                <th>Column 1</th>
                <th>Column 2</th>
                <th>Column 3</th>
                <th>Column 4</th>
                <th>Column 5</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="locked-col"></td>
                <td>1</td>
                <td>2</td>
                <td>3</td>
                <td>4</td>
                <td>5</td>
            </tr>
            <tr>
                <td class="locked-col"></td>
                <td>6</td>
                <td>7</td>
                <td>8</td>
                <td>9</td>
                <td>10</td>
            </tr>
            <tr>
                <td class="locked-col"></td>
                <td>11</td>
                <td>12</td>
                <td>13</td>
                <td>14</td>
                <td>15</td>
            </tr>
            <tr>
                <td class="locked-row"></td>
                <td>16</td>
                <td>17</td>
                <td>18</td>
                <td>19</td>
                <td>20</td>
            </tr>
            <tr>
                <td class="locked-row"></td>
                <td>21</td>
                <td>22</td>
                <td>23</td>
                <td>24</td>
                <td>25</td>
            </tr>
            <tr>
                <td class="locked-row"></td>
                <td>26</td>
                <td>27</td>
                <td>28</td>
                <td>29</td>
                <td>30</td>
            </tr>
        </tbody>
    </table>

    <script>
        $(document).ready(function(){
            var table = $('#mytable');

            // 获取顶部固定列和左侧固定行
            var fixedRows = table.find('tr:lt(3)');
            var fixedCols = table.find('tr td:nth-child(-n+3)');

            // 固定列的位置和 z-index
            fixedCols.each(function(){
                $(this).addClass('locked-col');
            });

            // 固定顶部行的位置和 z-index
            fixedRows.each(function(){
                $(this).find('td').addClass('locked-row');
            });

            // 滚动事件处理程序
            table.parent().scroll(function(){
                var scrollTop = $(this).scrollTop();
                var scrollLeft = $(this).scrollLeft();

                // 固定行和列,并设置其位置和 z-index
                fixedRows.each(function(){
                    $(this).find('.locked-row').css({ 'left': scrollLeft+'px' });
                });

                fixedCols.each(function(){
                    $(this).find('.locked-col').css({ 'top': scrollTop+'px' });
                });
            });
        });
    </script>
</body>
</html>

上面的代码中,我们使用了 position: fixed 和 z-index 来实现 HTML table 行、列的固定,并使用了 jQuery 框架来简化 JavaScript 代码的编写。在这里,我们分别使用了类名 locked-row 和 locked-col 来实现行、列的固定样式,并将其添加到对应的单元格中。

这个示例演示了如何锁定表格的前三行和前三列,并在滚动 table 时固定它们。你可以自己尝试修改代码,用不同的参数锁定不同的行和列。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现html table 行,列锁定的简单实例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxScheduler showLegend属性

    jQWidgets是一个基于jQuery的UI组件库,其中的jqxScheduler插件可以用于创建日程安排、预定等功能的日历视图控件。其中,showLegend属性用于控制是否在jqxScheduler控件中显示详细的时间图例信息。 showLegend属性的取值可以为布尔类型或者函数类型。下面是showLegend属性的详细讲解: showLegend属…

    jquery 2023年5月11日
    00
  • jquery表单提交带错误信息提示效果

    下面是关于 jquery 表单提交带错误信息提示的完整攻略: 1. 前期准备 在开始编写代码前,需要确保以下条件已经满足: 已经引入了 jQuery 库; 已经编写好了需要提交的表单; 已经准备好了后端接口,并能够在表单提交时正确响应。 2. 编写前端代码 2.1 绑定表单提交事件 在 jQuery 中,我们可以使用 $(selector).submit()…

    jquery 2023年5月19日
    00
  • jQWidgets jqxTreeGrid getColumnProperty()方法

    以下是关于 jQWidgets jqxTreeGrid 组件中 getColumnProperty() 方法的详细攻略。 jQWidgets jqxTreeGrid getColumnProperty() 方法 jQWidgets jqxTreeGrid 的 getColumnProperty 方法用于获取指定列的属性值。您可以使用此方法来获取列的属性值,以…

    jquery 2023年5月12日
    00
  • 关于jQuery.ajax()的jsonp碰上post详解

    关于jQuery.ajax()的jsonp和post的使用,可以通过以下方式进行详细讲解: 1. 什么是jsonp和post 1.1 JSONP JSONP(JSON with Padding)是一种跨域技术,可以用于从其他域名获取数据。它通过动态创建script标签,将服务器返回的数据作为参数传递给一个回调函数,从而实现跨域请求。JSONP只能用于get请…

    jquery 2023年5月28日
    00
  • 如何使用jQuery点击一个段落并添加另一个段落

    在jQuery中,我们可以使用click()方法来为元素添加点击事件,并使用append()方法或after()方法来添加新的元素。以下是详细的攻略: 方法一:使用append()方法添加新段落 我们可以使用append()方法来添加新的段落。以下是一个示例,演示了如何使用click()方法和append()方法在单击段落时添加另一个段落: <!DOC…

    jquery 2023年5月9日
    00
  • jQWidgets jqxPasswordInput rtl属性

    以下是关于 jQWidgets jqxPasswordInput 组件中 rtl 属性的详细攻略。 jQWidgets jqxPasswordInput rtl 属性 jQWidgets jqxPasswordInput 组件的 rtl 属性用于设置密码输入框的文本方向是否为从右到左。 语法 $(‘#passwordInput’).jqxPasswordIn…

    jquery 2023年5月12日
    00
  • 如何用jQuery替换一个div的innerHTML

    要用jQuery替换一个div的innerHTML,可以使用以下步骤: 使用jQuery选择器选中要替换innerHTML的div元素 var divElement = $("#divId"); 使用jQuery的html()方法替换新的innerHTML值 divElement.html("<p>New conte…

    jquery 2023年5月12日
    00
  • jQWidgets jqxGrid autoresizecolumn()方法

    jQWidgets 是一个流行的 JavaScript UI 库,提供了许多可定制的 UI 组件。其中一个组件是 jqxGrid,它是一个用于显示表格的控件。jqxGrid提供多个方法,其中之一是 autoresizecolumn()。下面是关于 jqxGrid 的 autoresizecolumn() 方法的详攻略: autoresizecolumn() …

    jquery 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部