当前位置: 首页 > 面试题库 >

具有固定标题的HTML表?

程胡非
2023-03-14
问题内容

是否有跨浏览器的CSS / JavaScript技术来显示较长的HTML表,以使列标题在屏幕上保持固定并且不随表主体滚动。考虑一下Microsoft
Excel中的“冻结窗格”效果。

我希望能够滚动浏览表的内容,但始终能够看到顶部的列标题。


问题答案:

一段时间以来,我一直在寻找解决方案,但发现大多数答案都不起作用或不适合我的情况,因此我用jQuery写了一个简单的解决方案。

这是解决方案概述:

  1. 克隆需要具有固定标题的表,然后将克隆的副本放在原始副本的顶部。
  2. 从顶部桌子上取下桌子主体。
  3. 从底部表格中删除表格标题。
  4. 调整列宽。(我们会跟踪原始列宽)

以下是可运行演示中的代码。

function scrolify(tblAsJQueryObject, height) {

  var oTbl = tblAsJQueryObject;



  // for very large tables you can remove the four lines below

  // and wrap the table with <div> in the mark-up and assign

  // height and overflow property

  var oTblDiv = $("<div/>");

  oTblDiv.css('height', height);

  oTblDiv.css('overflow', 'scroll');

  oTbl.wrap(oTblDiv);



  // save original width

  oTbl.attr("data-item-original-width", oTbl.width());

  oTbl.find('thead tr td').each(function() {

    $(this).attr("data-item-original-width", $(this).width());

  });

  oTbl.find('tbody tr:eq(0) td').each(function() {

    $(this).attr("data-item-original-width", $(this).width());

  });





  // clone the original table

  var newTbl = oTbl.clone();



  // remove table header from original table

  oTbl.find('thead tr').remove();

  // remove table body from new table

  newTbl.find('tbody tr').remove();



  oTbl.parent().parent().prepend(newTbl);

  newTbl.wrap("<div/>");



  // replace ORIGINAL COLUMN width

  newTbl.width(newTbl.attr('data-item-original-width'));

  newTbl.find('thead tr td').each(function() {

    $(this).width($(this).attr("data-item-original-width"));

  });

  oTbl.width(oTbl.attr('data-item-original-width'));

  oTbl.find('tbody tr:eq(0) td').each(function() {

    $(this).width($(this).attr("data-item-original-width"));

  });

}



$(document).ready(function() {

  scrolify($('#tblNeedsScrolling'), 160); // 160 is height

});


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>



<div style="width:300px;border:6px green solid;">

  <table border="1" width="100%" id="tblNeedsScrolling">

    <thead>

      <tr><th>Header 1</th><th>Header 2</th></tr>

    </thead>

    <tbody>

      <tr><td>row 1, cell 1</td><td>row 1, cell 2</td></tr>

      <tr><td>row 2, cell 1</td><td>row 2, cell 2</td></tr>

      <tr><td>row 3, cell 1</td><td>row 3, cell 2</td></tr>

      <tr><td>row 4, cell 1</td><td>row 4, cell 2</td></tr>

      <tr><td>row 5, cell 1</td><td>row 5, cell 2</td></tr>

      <tr><td>row 6, cell 1</td><td>row 6, cell 2</td></tr>

      <tr><td>row 7, cell 1</td><td>row 7, cell 2</td></tr>

      <tr><td>row 8, cell 1</td><td>row 8, cell 2</td></tr>

    </tbody>

  </table>

</div>

此解决方案可在Chrome和IE中使用。由于它基于jQuery,因此它也应该在其他受jQuery支持的浏览器中也可以使用。



 类似资料:
  • 问题内容: 我有一个解决方案,可以使用较小的jQuery和CSS创建带有固定页眉/页脚的可滚动表-但我正在寻找一种方法,使之成为跨浏览器兼容的仅CSS解决方案。 需要明确的是,我所寻求要做的是使用 只有 一个标签(和它是有效的子标签,,,,,,,,),而是采用了一套将符合下列条件的CSS规则: 必须保持页眉/页脚/内容行之间的列对齐 当内容垂直滚动时,必须允许页眉/页脚保持固定 不得使用任何jQu

  • 问题内容: 我需要在网页上显示一个大表,并且需要防止第一列和第一行滚动。 我想动态设置此表的垂直大小(在某些静态大小的页眉/页脚页面内容之间),以使其尽可能高,而不必强制浏览器窗口具有垂直滚动条。 这仅需要在使用所有/任何版本的现代浏览器中工作:html,css,javascript,jquery 重要顺序: 具有许多表单字段,隐藏值,行的javascript折叠等的复杂表,稍后将添加 第一行将有

  • 问题内容: 我一直在尝试一种方法来制作具有固定的第一列的表(表的其余部分具有水平的溢出),我看到有类似问题的帖子。但是固定的列位似乎没有解决。帮帮我? 问题答案: 我有一个类似的样式,如下所示:

  • 问题内容: 我想制作一个冻结顶部行的html表(因此,当您垂直向下滚动时,总是可以看到它)。 有没有使这种情况发生的聪明方法,而无需使用javascript? 请注意,我不需要冻结左列。 问题答案: 如果没有JavaScript,您将无法有效实现这一目标……特别是如果您想要跨浏览器支持。 您采取的任何方法都有很多问题,特别是关于跨浏览器/版本支持的问题。 编辑: 即使不是您要修复的标头,而是数据的

  • 问题内容: 我有一个固定位置的标头(动态高度)。 我需要将容器div放在标题下方。由于页眉高度是动态的,因此无法将固定值用于顶部边距。 如何才能做到这一点? 这是我的CSS: …和HTML: 问题答案: 好!正如我现在看到的问题一样,我意识到由于标题的动态高度,我不想提及固定的边距值。 这是我在此类情况下一直使用的内容。 使用jQuery计算标头高度,并将其应用为顶部边距值。

  • 问题内容: 在此处输入图片说明我需要你的帮助。我不确定如何冻结表或表的第一行,其中包含要冻结的标题,而我却可以滚动表?仅使用CSS标记而不使用Javascript框架,我将如何实现这一目标? 问题答案: 将以下内容添加到CSS中。 试试这个代码