Dank digitaldigs von MozillaZine konnte ich es mit wenigen Änderungen zum Laufen bringen. Der Fix funktioniert gut für FF4, FF7 und FF11.
Ich hoffe, das hilft! :)
Probleme, die ich behoben habe. 1. scrollWidth hat bei mir nicht funktioniert, also musste ich offsetWidth verwenden.
-
Die Breite der Bildlaufleiste von 16 Pixeln war auch nicht hilfreich, also wurde sie entfernt. Stattdessen machte meine tbody Stil als-
.scrollContent { overflow-x:hidden; overflow-y:scroll; /* Ich habe das nur für Mozilla gemacht. IE zeigt 2 Bildlaufleisten an, wenn es angewendet wird*/ display:block; }
-
Bei Änderung Nr. 2 musste ich die letzte Zelle der Kopfzeile auffüllen, um die Bildlaufleiste unterzubringen.
/* Ich habe das nur für Mozilla gemacht. Nicht für IE*/
.fixedHeader tr th:last-child { padding-right: 20px; }
-
Meine feste Kopftabelle hat colspan viel verwendet daher war nicht in der Lage, Breite zu setzen, so dass ich zuerst für eine richtige Zeile mit der richtigen Anzahl von Zellen suchen und dann ich verarbeiten.
Mein Code sieht wie folgt aus:
function makeMeFixedHeader(){
var tbodys = document.getElementsByName("scrollTableBody");
if (tbodys){
for(var i=0;i<tbodys.length;i++){
// We can put logic here to check if the current height
// of tbody has crossed the specified limit or not
do_tbodyscroll(tbodys[i]);
}
}
}
function do_tbodyscroll(_tbody){
// get the table node
var table = _tbody.parentNode;
// Get the Last row in Thead ...
// COLGROUPS USING COLSPAN NOT YET SUPPORTED
var thead = table.getElementsByTagName("THEAD")[0];
var _rows = thead.getElementsByTagName("TR");
var tableheader = _rows[_rows.length - 1];
var headercells = tableheader.cells;
// rows of tbody
var _frows = _tbody.getElementsByTagName("TR");
// first row of tbody
var _fr = _tbody.getElementsByTagName("TR")[0];
//var _fr = _tbody.getElementsByName("scrollTableRow")[0];
// first row cells ..
var _frcells = _fr.cells;
if (_frcells.length < headercells.length){
var rowCount = 1;
while (rowCount < _frows.length){
// nth row of tbody
_fr = _tbody.getElementsByTagName("TR")[rowCount];
//var _fr = _tbody.getElementsByName("scrollTableRow")[rowCount];
// nth row cells ..
_frcells = _fr.cells;
if (headercells.length == _frcells.length){
break;
}
rowCount++;
}
}
// Apply width to header ..
for(var i=0; i<headercells.length; i++){
if (tableheader.cells[i].offsetWidth != _fr.cells[i].offsetWidth){
var lastColumn = (i == headercells.length-1)?true:false;
var changeWidth = (lastColumn)? ((rowCount >= 1)?true:false)
:true;
var headerW = tableheader.cells[i].offsetWidth;
var cellW = _fr.cells[i].offsetWidth;
if (headerW < cellW){
tableheader.cells[i].width = cellW;
_fr.cells[i].width = tableheader.cells[i].width;
if (lastColumn)
tableheader.cells[i].width = tableheader.cells[i].offsetWidth-20;
}else{
tableheader.cells[i].width = headerW;
_fr.cells[i].width = tableheader.cells[i].width;
if (lastColumn)
_fr.cells[i].width = tableheader.cells[i].offsetWidth-20;
}
}
}
//var j = headercells.length-1;
// ADD 16 Pixel of scroll bar to last column ..
//tableheader.cells[j].width = _fr.cells[j].offsetWidth + 20;
tableheader.style.display = "block";
_tbody.style.display = "block";
}