Download the X Distribution File.
new xTable(sTableId, sRoot, sCC, sFR, sFRI, sRCell, sFC, sFCI, sCCell, sTC, sCellT)
// xTable r1, Copyright 2007 Michael Foster (Cross-Browser.com) // Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL function xTable(sTableId, sRoot, sCC, sFR, sFRI, sRCell, sFC, sFCI, sCCell, sTC, sCellT) { var i, ot, cc=null, fcw, frh, root, fr, fri, fc, fci, tc; var e, t, tr, a, alen, tmr=null; ot = xGetElementById(sTableId); // original table if (!ot || !document.createElement || !document.appendChild || !ot.deleteCaption || !ot.deleteTHead) { return null; } fcw = xWidth(ot.rows[1].cells[0]); // get first column width before altering ot frh = xHeight(ot.rows[0]); // get first row height before altering ot root = document.createElement('div'); // overall container root.className = sRoot; fr = document.createElement('div'); // frozen-row container fr.className = sFR; fri = document.createElement('div'); // frozen-row inner container, for column headings fri.className = sFRI; fr.appendChild(fri); root.appendChild(fr); fc = document.createElement('div'); // frozen-column container fc.className = sFC; fci = document.createElement('div'); // frozen-column inner container, for row headings fci.className = sFCI; fc.appendChild(fci); root.appendChild(fc); tc = document.createElement('div'); // table container, contains ot tc.className = sTC; root.appendChild(tc); if (ot.caption) { cc = document.createElement('div'); // caption container cc.className = sCC; cc.appendChild(ot.caption.firstChild); // only gets first child root.appendChild(cc); ot.deleteCaption(); } // Create fr cells (column headings) a = ot.rows[0].cells; alen = a.length; for (i = 1; i < alen; ++i) { e = document.createElement('div'); e.className = sRCell; t = document.createElement('table'); t.className = sCellT; tr = t.insertRow(0); tr.appendChild(a[1]); e.appendChild(t); fri.appendChild(e); } if (ot.tHead) { ot.deleteTHead(); } // Create fc cells (row headings) a = ot.rows; alen = a.length; for (i = 0; i < alen; ++i) { e = document.createElement('div'); e.className = sCCell; t = document.createElement('table'); t.className = sCellT; tr = t.insertRow(0); tr.appendChild(a[i].cells[0]); e.appendChild(t); fci.appendChild(e); } ot = ot.parentNode.replaceChild(root, ot); tc.appendChild(ot); resize(); root.style.visibility = 'visible'; xAddEventListener(tc, 'scroll', onScroll, false); xAddEventListener(window, 'resize', onResize, false); function onScroll() { xLeft(fri, -tc.scrollLeft); xTop(fci, -tc.scrollTop); } function onResize() { if (!tmr) { tmr = setTimeout( function() { resize(); tmr=null; }, 500); } } function resize() { var sum = 0, cch = 0, w, h; // caption container if (cc) { cch = xHeight(cc); xMoveTo(cc, 0, 0); xWidth(cc, xWidth(root)); } // frozen row xMoveTo(fr, fcw, cch); xResizeTo(fr, xWidth(root) - fcw, frh); xMoveTo(fri, 0, 0); xResizeTo(fri, xWidth(ot), frh); // frozen col xMoveTo(fc, 0, cch + frh); xResizeTo(fc, fcw, xHeight(root) - cch); xMoveTo(fci, 0, 0); xResizeTo(fci, fcw, xHeight(ot)); // table container xMoveTo(tc, fcw, cch + frh); xWidth(tc, xWidth(root) - fcw - 1); xHeight(tc, xHeight(root) - cch - frh - 1); // size and position fr cells a = ot.rows[0].cells; e = xFirstChild(fri, 'div'); for (i = 0; i < a.length; ++i) { xMoveTo(e, sum, 0); w = xWidth(e, xWidth(a[i])); h = xHeight(e, frh); sum += w; xResizeTo(xFirstChild(e, 'table'), w, h);////////// e = xNextSib(e, 'div'); } // size and position fc cells sum = 0; a = ot.rows; e = xFirstChild(fci, 'div'); for (i = 0; i < a.length; ++i) { xMoveTo(e, 0, sum); w = xWidth(e, fcw); h = xHeight(e, xHeight(a[i])); sum += h; xResizeTo(xFirstChild(e, 'table'), w, h);////////// e = xNextSib(e, 'div'); } onScroll(); } // end resize } // end xTable
xGetElementById, xWidth, xHeight, xAddEventListener, xLeft, xTop, xMoveTo, xResizeTo, xFirstChild, xNextSib
xtable - xTable demo.
By your use of X and/or CBE and/or any Javascript from this site you consent to the GNU LGPL - please read it. If you have any questions about the license, read the FAQ and/or come to the forums.
Forum support is available at the X Library Support Forums.
Cross-Browser.com is the home of X - a cross-browser Javascript library, and many demos, applications, articles and documentation.
If you are using X, XC or anything from this site, show off your work by posting a link in the X Showcase forum.