我尝试在页面上向下滑动时修复表头。问题出在 IE7 中,thead不是绝对的,而是显示在“正确”的位置。它需要飞过桌子。它在 Firefox 11 中完美运行
我有一个表结构如下:
<span id="MyTable">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<thead class="tableFloatingHeader">
<tr>
<th>t</th>
<th>t</th>
<th>t</th>
<th>t</th>
<th>t</th>
<th>t</th>
</tr>
<tr>
<td><b>Total</b></td>
<td></td>
<td align="right"><b>2</b></td>
<td align="right"><b>2</b></td>
<td align="right"><b>2</b></td>
<td align="right"><b>2</b></td>
</tr>
</thead>
<thead class="tableFloatingHeaderOriginal">
<tr>
<th>t</th>
<th>t</th>
<th>t</th>
<th>t</th>
<th>t</th>
<th>t</th>
</tr>
<tr>
<td><b>Total</b></td>
<td></td>
<td align="right"><b>2</b></td>
<td align="right"><b>2</b></td>
<td align="right"><b>2</b></td>
<td align="right"><b>2</b></td>
</tr>
</thead>
CSS
.tableFloatingHeader {
overflow: hidden;
position: absolute;
top: 0;
display: none;
left: auto;
background-color: red;
}
jQuery
<script type="text/javascript">
function UpdateTableHeaders() {
$("div.divTableWithFloatingHeader").each(function() {
var originalHeaderRow = $(".tableFloatingHeaderOriginal");
var floatingHeaderRow = $(".tableFloatingHeader");
var offset = $(this).offset();
var scrollTop = $(window).scrollTop();
if ((scrollTop > offset.top) && (scrollTop < offset.top + $(this).height())) {
floatingHeaderRow.css("display", "block");
floatingHeaderRow.css("top", Math.min(scrollTop - offset.top, $(this).height() - floatingHeaderRow.height()) + "px");
// Copy cell widths from original header
$("th", floatingHeaderRow).each(function(index) {
var cellWidth = $("th", originalHeaderRow).eq(index).css('width');
$(this).css('width', cellWidth);
});
// Copy row width from whole table
floatingHeaderRow.css("width", $(this).css("width"));
}
else {
floatingHeaderRow.css("display", "none");
floatingHeaderRow.css("top", "0px");
}
});
}
UpdateTableHeaders();
$(window).scroll(UpdateTableHeaders);
$(window).resize(UpdateTableHeaders);
</script>