Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 表格-固定标题、可滚动正文、最健壮/简单的解决方案?_Javascript_Html_Css_Html Table - Fatal编程技术网

Javascript 表格-固定标题、可滚动正文、最健壮/简单的解决方案?

Javascript 表格-固定标题、可滚动正文、最健壮/简单的解决方案?,javascript,html,css,html-table,Javascript,Html,Css,Html Table,可能重复: 正在寻找一个解决方案来创建一个具有可滚动主体和静态/固定标题的表 四处搜索似乎会产生许多不稳定的代码,要么在IE中无法工作,需要大量的Javascript和调整,要么是愚蠢的CSS攻击等等 老实说,如果是CSS黑客或Javascript,我想我更喜欢Javascript选项 我想,另一种方法是将其全部放在一个div中,然后滚动整个表-但这有点像naff:D我认为解决方案是为tbody设置一个显式高度,并将溢出设置为auto或scroll。不幸的是,正如您所发现的,表格和CSS是一个

可能重复:

正在寻找一个解决方案来创建一个具有可滚动主体和静态/固定标题的表

四处搜索似乎会产生许多不稳定的代码,要么在IE中无法工作,需要大量的Javascript和调整,要么是愚蠢的CSS攻击等等

老实说,如果是CSS黑客或Javascript,我想我更喜欢Javascript选项


我想,另一种方法是将其全部放在一个div中,然后滚动整个表-但这有点像naff:D

我认为解决方案是为tbody设置一个显式高度,并将溢出设置为auto或scroll。不幸的是,正如您所发现的,表格和CSS是一个棘手的组合,IE喜欢扼杀它。


<table style="width: 300px" cellpadding="0" cellspacing="0">
<tr>
  <td>Column 1</td>
  <td>Column 2</td>
</tr>
</table>

<div style="overflow: auto;height: 100px; width: 320px;">
  <table style="width: 300px;" cellpadding="0" cellspacing="0">
  <tr>
    <td>Value 1</td>
    <td>Value 2</td>
  </tr>
  <tr>
    <td>Value 1</td>
    <td>Value 2</td>
  </tr>
  <tr>
    <td>Value 1</td>
    <td>Value 2</td>
  </tr>
  <tr>
    <td>Value 1</td>
    <td>Value 2</td>
  </tr>
  <tr>
    <td>Value 1</td>
    <td>Value 2</td>
  </tr>
  <tr>
    <td>Value 1</td>
    <td>Value 2</td>
  </tr>
  </table>
</div>
第1栏 第2栏 值1 价值2 值1 价值2 值1 价值2 值1 价值2 值1 价值2 值1 价值2
这将创建一个固定的列标题,其下有可滚动的表格。诀窍是将要滚动的表嵌入到溢出属性设置为自动的标记中。当内部表格的内容大于周围表格的高度时,这将强制浏览器显示滚动条

如果要容纳滚动条,外部表格的宽度必须大于内部表格的宽度。这可能很难完全正确,因为有些用户可能已将滚动条设置为比默认值更宽或更小。但是,如果相差20到30像素,您通常可以很好地显示滚动条


CSS技巧还讨论了使用JavaScript和CSS来帮助实现这一点,以便您可以使用高亮显示。这是链接。

如果你能修改列宽,那就容易多了。如果你想让浏览器计算出宽度,那就要困难得多。基本上,在div中有一个滚动的表(height,overflow:auto),并将该div放在一个位置:relative div中。在外部div中,有另一个div位置:absolute,overflow:hidden,height:无论标题高度如何,都将该div的innerHTML设置为内部div的innerHTML;这里有一个页面演示。有很多陷阱,但它是可行的

<html>
<head></head>
<body onload="doit();">
<div id="outer" style="position:relative;">
  <div id="inner" style="height:100px; overflow:auto;">
    <script>
       var html = '<table><tr><th>Heading 1</th><th>Heading 2</th></tr>';
       var width = Math.floor(Math.random() * 100);
       var d = '';
       for(var i = 0; i < width; i++){d += 'a';}
       for(var i = 0; i < 100; i++){
          html += '<tr><td>' + d + '</td><td>some more data</td>';
       }
       html += '</table>';
       document.write(html);
    </script>
  </div>
  <div id="secondWrapper" style="position:absolute; background:#fff; left:0; top:0; height:25px; overflow:hidden;"></div>
</div>

<script>
function doit(){
  var inner = document.getElementById('inner');
  var secondWrapper = document.getElementById('secondWrapper');
  secondWrapper.innerHTML = inner.innerHTML; 
}
</script>
</body>
</html>

var html='标题1标题2';
var width=Math.floor(Math.random()*100);
var d=“”;
对于(var i=0;i

请注意,当您刷新和数据大小更改时,标头将完全匹配。这才是真正的诀窍。

对于那些寻找非JS解决方案的人来说,还有一个关于这类事情的测验。然而,我发现如果单元格的内容不够宽,那么表尾是阻止表头折叠其宽度所必需的。我最终将tfoot隐藏在我使用它的应用程序中。

它是纯HTML/CSS,适用于IE6和现代浏览器。不过,标题的样式设置有一些限制。

我刚刚组装了一个jQuery插件,它可以完全满足您的需要。它的体积非常小,而且很容易实现

所需要的只是一张有THAD和tbody的桌子

您可以使用类名将该表包装在一个DIV中,并且该表将始终调整大小以适应该DIV。例如,如果您的DIV随浏览器窗口缩放,则该表也将调整大小。滚动时标题将被固定。页脚将被修复(如果启用页脚)。您还可以选择在页脚中克隆页眉并将其修复。此外,如果您的浏览器窗口太小,所有列都无法容纳…它也将水平滚动(标题也)

此插件允许浏览器调整列的大小,使它们不是固定宽度的列

只需将DIV的类名传递给插件,如下所示:$('.myDiv').fixedHeaderTable({footer:true,footerId:'myFooterId'});插件将完成剩下的工作。FooterID是页面上包含页脚标记的元素。如果要将分页作为页脚,则使用此选项

如果页面上有多个表,那么它也适用于每个需要固定标题的表

在这里查看:

请记住它仍然是“beta版”,所以我每天都在添加新功能和bug修复

支持的浏览器:IE6、IE7、IE8、FireFox、Safari和Chrome

下面是我对另一个有同样问题的人的回答的链接:

这个怎么样:

<table style="width: 400px;"> 
<thead><tr> <th> head </th> </tr>
</thead>
<tbody style="height: 100px; overflow-y: auto; overflow-x: hidden;">
<tr> <th> .. </th> </tr>
</tbody>
</table>

头
..  

虽然这样做有效,但从可访问性的角度来看,这并不好。没有表头(),即使有,它们也不会显式地与相关列关联,因为表被分为两个表。如果我手动定义每列的宽度,这实际上是非常关键的-正如pmc所说,从可访问性来看,可能并不理想,但我所看到的所有解决方案,这是我最喜欢的,非常感谢!如果你的桌子被挤得很紧,这看起来就不对了。是的,我正在研究一个类似的解决方案,但我遇到了一个问题,滚动条的标题有点偏离。杜普:我根本不明白它是怎么工作的,所以它一定是黑魔法。更严重的是,我不得不摆弄我的TH标签的高度和第二个包装的高度来让它工作。如果表格的最大宽度为98%左右,看起来效果会更好,以防止表格和滚动条相互碰撞。你怎么上来的