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 jqxChart描述属性

    jQWidgets 的 jqxChart 组件提供了 description 属性,用于为图表添加描述信息。本文将详细介绍 description 属性的使用方法,包括概述、示例以及注意事项。 description 属性概述 description 属性用于为图表添加描述信息。可以将该属性设置为任何有效的字符串,如 这是一个柱状图、这是一个折线图 等。如果…

    jquery 2023年5月11日
    00
  • preventDefault()事件方法

    下面是关于“preventDefault()事件方法”的详细讲解: 什么是preventDefault()? preventDefault()是一个JavaScript事件方法,可以用来阻止浏览器默认的行为。例如:在一个表单提交时,如果不希望页面跳转,可以用preventDefault()方法来阻止默认行为。 如何使用preventDefault()? pr…

    jquery 2023年5月13日
    00
  • jQWidgets jqxSortable disable() 方法

    介绍 jQWidgets jqxSortable 插件通过拖动和重新排序元素来提供排序机制。 disable 方法可以在需要时禁用或启用此插件,以便在需要时对元素进行重新排序。禁用后用户无法再使用拖拽技术对元素进行排序。 在本文中,我们将详细介绍 jQWidgets jqxSortable 插件中 disable 方法的使用方式。 语法 disable():…

    jquery 2023年5月12日
    00
  • 推荐30个新鲜出炉的精美 jQuery 效果

    下面我将为你详细讲解“推荐30个新鲜出炉的精美 jQuery 效果”的完整攻略。 前言 在前端开发中,jQuery 是一个非常常用的 JavaScript 库,它可以大大降低 js 开发的难度,提高开发效率。本攻略将为大家介绍 30 个新鲜出炉的、精美的 jQuery 效果,帮助大家更好地应用 jQuery 来实现一些复杂的页面效果。 效果展示 以下是两个示…

    jquery 2023年5月28日
    00
  • jQuery UI Tooltips option()方法

    以下是关于 jQuery UI Tooltips option() 方法的详细攻略: jQuery UI Tooltips option() 方法 可以使用 option() 方法来获取或设置工具提示小部件的选项。 语法 $(selector).tooltip( "option", optionName ); $(selector).to…

    jquery 2023年5月11日
    00
  • jquery ui dialog替代confirm实例分析

    jQuery UI Dialog替代Confirm实例分析 在前端开发中,我们经常需要弹出提示框来询问用户是否确认某个操作。而最常用的方式无疑是使用JavaScript自带的confirm函数。但是,confirm函数样式非常简陋,不够美观,在UI设计上无法给用户更好的体验。此时,jQuery UI库提供了更为美观、灵活的Dialog组件,可以完美代替con…

    jquery 2023年5月18日
    00
  • jQWidgets jqxGrid宽度属性

    jQWidgets jqxGrid宽度属性 jQWidgets jqxGrid 是一种表格控件,用于在 Web 应用程序中创建表格。width 属性是 jqxGrid 控件的一个属性,用于设置表格的宽度。本文将详细讲解 width 属性的使用方法,并提供两个示例。 属性 width 属性用于设置 jqxGrid 控件的宽度。该属性接受一个字符串或数字参数,表…

    jquery 2023年5月10日
    00
  • jQWidgets jqxTreeGrid rowBeginEdit事件

    以下是关于 jQWidgets jqxTreeGrid 组件中 rowBeginEdit 事件的详细攻略。 jQWidgets jqxTreeGrid rowBeginEdit 事件 jQWidgets jqxTreeGrid 组件的 rowBeginEdit 事件在用户编辑 TreeGrid 控件的行时触发。您可以使用此事件来执行一些操作,例如禁用其他行的…

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