Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p><strong>Edit 5:</strong> - Added configurable fixed Rows and Columns. - Fixed column width and height issues - Reduced usage of complex selectors</p> <p><strong>Usage:</strong></p> <pre><code> $('#cTable').cTable({ width: 1300, height: 500, fCols: 2, fRows: 2 }); </code></pre> <p><strong>DEMO:</strong> <a href="http://jsfiddle.net/rCuPf/7/embedded/result/">http://jsfiddle.net/rCuPf/7/embedded/result/</a> (updated demo)</p> <p><strong>Edit 4:</strong> Updated for colSpan on column 1. <strong>Demo:</strong> <s>http://jsfiddle.net/skram/rKjk3/26/</s></p> <p><strong>Edit 3:</strong> Did some cleanup and some fixes: <s> <a href="http://jsfiddle.net/rKjk3/22">http://jsfiddle.net/rKjk3/22</a> </s> Tested in IE9, FF and Chrome. (I don't have latest IE to test it now)</p> <p><strong>Edit 2:</strong> Fix for IE: <s>http://jsfiddle.net/rKjk3/15/embedded/result/</s> (See latest above)</p> <p><strong>Edit 1:</strong> Fix for resize window <s>http://jsfiddle.net/rKjk3/11/</s> (See latest above)</p> <ul> <li>Added window.resize event handler to set the width of the <code>rightContainer</code> so the width of actual table will be increased as you resize.</li> <li>Removed fixed width on <code>SBWrapper</code> so that it can fully utilize the available space inside the container.</li> </ul> <p>I have created 2 demo for your requirement. </p> <ol> <li><p>Sample to show how the rendered html will look like with a simple markup structure. This will allow you to look at the structure that is being rendered and how it is working :)<br /> <strong>DEMO:</strong> <a href="http://jsfiddle.net/GmJ22/7/">http://jsfiddle.net/GmJ22/7/</a></p></li> <li><p>Actual demo with the markup that you have posted. The code is just a rough version and may require some cleanup. Right now you can configure the width and height of the table. I am posting it so that you can take a look and give me some feedback. <br/> <strong>DEMO:</strong> <s>http://jsfiddle.net/rKjk3/10/embedded/result/</s> (see below fixed versions)</p></li> </ol> <p><strong>Full code:</strong></p> <pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt; &lt;HTML&gt; &lt;HEAD&gt; &lt;TITLE&gt;big scrolling table example&lt;/TITLE&gt; &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"&gt;&lt;/script&gt; &lt;script&gt; $(function() { $.fn.cTable = function(o) { this.wrap('&lt;div class="cTContainer" /&gt;'); this.wrap('&lt;div class="relativeContainer" /&gt;'); //Update below template as how you have it in orig table var origTableTmpl = '&lt;table border="1" cellspacing="1" cellpadding="0" align="center" width="95%" &gt;&lt;/table&gt;'; //get row 1 and clone it for creating sub tables var row1 = this.find('tr').slice(0, o.fRows).clone(); var r1c1ColSpan = 0; for (var i = 0; i &lt; o.fCols; i++ ) { r1c1ColSpan += this[0].rows[0].cells[i].colSpan; } //create table with just r1c1 which is fixed for both scrolls var tr1c1 = $(origTableTmpl); row1.each(function () { var tdct = 0; $(this).find('td').filter( function () { tdct += this.colSpan; return tdct &gt; r1c1ColSpan; }).remove(); }); row1.appendTo(tr1c1); tr1c1.wrap('&lt;div class="fixedTB" /&gt;'); tr1c1.parent().prependTo(this.closest('.relativeContainer')); //create a table with just c1 var c1= this.clone().prop({'id': ''}); c1.find('tr').slice(0, o.fRows).remove(); c1.find('tr').each(function (idx) { var c = 0; $(this).find('td').filter(function () { c += this.colSpan; return c &gt; r1c1ColSpan; }).remove(); }); var prependRow = row1.first().clone(); prependRow.find('td').empty(); c1.prepend(prependRow).wrap('&lt;div class="leftSBWrapper" /&gt;') c1.parent().wrap('&lt;div class="leftContainer" /&gt;'); c1.closest('.leftContainer').insertAfter('.fixedTB'); //create table with just row 1 without col 1 var r1 = $(origTableTmpl); row1 = this.find('tr').slice(0, o.fRows).clone(); row1.each(function () { var tds = $(this).find('td'), tdct = 0; tds.filter (function () { tdct += this.colSpan; return tdct &lt;= r1c1ColSpan; }).remove(); }); row1.appendTo(r1); r1.wrap('&lt;div class="topSBWrapper" /&gt;') r1.parent().wrap('&lt;div class="rightContainer" /&gt;') r1.closest('.rightContainer').appendTo('.relativeContainer'); $('.relativeContainer').css({'width': 'auto', 'height': o.height}); this.wrap('&lt;div class="SBWrapper"&gt; /') this.parent().appendTo('.rightContainer'); this.prop({'width': o.width}); var tw = 0; //set width and height of rendered tables for (var i = 0; i &lt; o.fCols; i++) { tw += $(this[0].rows[0].cells[i]).outerWidth(true); } tr1c1.width(tw); c1.width(tw); $('.rightContainer').css('left', tr1c1.outerWidth(true)); for (var i = 0; i &lt; o.fRows; i++) { var tr1c1Ht = $(c1[0].rows[i]).outerHeight(true); var thisHt = $(this[0].rows[i]).outerHeight(true); var finHt = (tr1c1Ht &gt; thisHt)?tr1c1Ht:thisHt; $(tr1c1[0].rows[i]).height(finHt); $(r1[0].rows[i]).height(finHt); } $('.leftContainer').css({'top': tr1c1.outerHeight(true), 'width': tr1c1.outerWidth(true)}); var rtw = $('.relativeContainer').width() - tw; $('.rightContainer').css({'width' : rtw, 'height': o.height, 'max-width': o.width - tw}); var trs = this.find('tr'); trs.slice(1, o.fRows).remove(); trs.slice(0, 1).find('td').empty(); trs.each(function () { var c = 0; $(this).find('td').filter(function () { c += this.colSpan; return c &lt;= r1c1ColSpan; }).remove(); }); r1.width(this.outerWidth(true)); for (var i = 1; i &lt; c1[0].rows.length; i++) { var c1Ht = $(c1[0].rows[i]).outerHeight(true); var thisHt = $(this[0].rows[i]).outerHeight(true); var finHt = (c1Ht &gt; thisHt)?c1Ht:thisHt; $(c1[0].rows[i]).height(finHt); $(this[0].rows[i]).height(finHt); } $('.SBWrapper').css({'height': $('.relativeContainer').height() - $('.topSBWrapper').height()}); $('.SBWrapper').scroll(function () { var rc = $(this).closest('.relativeContainer'); var lfW = rc.find('.leftSBWrapper'); var tpW = rc.find('.topSBWrapper'); lfW.css('top', ($(this).scrollTop()*-1)); tpW.css('left', ($(this).scrollLeft()*-1)); }); $(window).resize(function () { $('.rightContainer').width(function () { return $(this).closest('.relativeContainer').outerWidth() - $(this).siblings('.leftContainer').outerWidth(); }); }); } $('#cTable').cTable({ width: 1300, height: 500, fCols: 2, fRows: 2 }); }); &lt;/script&gt; &lt;style&gt; .cTContainer { overflow: hidden; padding: 2px; } .cTContainer table { table-layout: fixed; } .relativeContainer { position: relative; overflow: hidden;} .fixedTB { position: absolute; z-index: 11; } .leftContainer { position: absolute; overflow: hidden; } .rightContainer { position: absolute; overflow: hidden; } .leftSBWrapper { position: relative; z-index: 10; } .topSBWrapper { position: relative; z-index: 10; width: 100%; } .SBWrapper { width: 100%; overflow: auto; } td { background-color: white; overflow: hidden; padding: 1px; } &lt;/style&gt; &lt;/HEAD&gt; &lt;BODY&gt; &lt;form name="MyForm" method="POST" action=""&gt; &lt;table border="1" width="100%" cellspacing="1" cellpadding="0" align="center"&gt; &lt;tr&gt; &lt;td width="35%" align="left"&gt;header junk left&lt;/td&gt; &lt;td &gt;- HEADER JUNK MIDDLE -&lt;/td&gt; &lt;td width="35%" align="right"&gt;header junk right&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;br /&gt; &lt;table border="0" width="95%" cellspacing="1" cellpadding="0" align="center"&gt; &lt;tr&gt; &lt;td width="60%" align="left"&gt;header junk left&lt;/td&gt; &lt;td width="40%" align="right"&gt;check it out! &lt;input type="checkbox" onchange="alert('your javascript here');" value="Y" name="checkitout"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;!-- big table here!!--&gt;&lt;!-- big table here!!--&gt;&lt;!-- big table here!!--&gt;&lt;!-- big table here!!--&gt; &lt;table border="1" width="95%" cellspacing="1" cellpadding="0" align="center" id="cTable" &gt; &lt;tr&gt; &lt;td width="5%" colspan="3"&gt;fixed can be long&lt;br&gt;or short&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll A&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll B&lt;/td&gt; &lt;td width="3%"&gt;scroll C&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll D&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll E&lt;/td&gt; &lt;td width="3%"&gt;scroll F&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll G&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll H&lt;/td&gt; &lt;td width="3%"&gt;scroll I&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll J&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll K&lt;/td&gt; &lt;td width="3%"&gt;scroll L&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll M&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll N&lt;/td&gt; &lt;td width="3%"&gt;scroll O&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td width="5%" colspan="3"&gt;2nd fixed header&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll 2A&lt;/td&gt; &lt;td width="7%"&gt;scroll 2B-1&lt;/td&gt; &lt;td width="7%"&gt;scroll 2B-2 &lt;/td&gt; &lt;td width="3%"&gt;scroll 2C&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll 2D&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll 2E&lt;/td&gt; &lt;td width="3%"&gt;scroll 2F&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll 2G&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll 2H&lt;/td&gt; &lt;td width="3%"&gt;scroll 2I&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll 2J&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll 2K&lt;/td&gt; &lt;td width="3%"&gt;scroll 2L&lt;/td&gt; &lt;td width="9%" colspan="4"&gt;scroll 2M&lt;/td&gt; &lt;td width="7%" colspan="2"&gt;scroll 2N&lt;/td&gt; &lt;td width="3%"&gt;scroll 2O&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;1 1 1 1 1 A&lt;/td&gt; &lt;td&gt;2 2 2 2 2 A&lt;/td&gt; &lt;td&gt;3 3 3 3 3 A&lt;/td&gt; &lt;td&gt;4 4 4 4 4 A&lt;/td&gt; &lt;td&gt;1 B&lt;/td&gt; &lt;td&gt;2 B&lt;/td&gt; &lt;td &gt;1 C&lt;/td&gt; &lt;td&gt;1 D&lt;/td&gt; &lt;td&gt;2 D&lt;/td&gt; &lt;td&gt;3 D&lt;/td&gt; &lt;td&gt;4 D&lt;br&gt;more...&lt;/td&gt; &lt;td&gt;1 E&lt;/td&gt; &lt;td&gt;2 E&lt;/td&gt; &lt;td &gt;1 F&lt;/td&gt; &lt;td&gt;1 1 1 G&lt;/td&gt; &lt;td&gt;2 2 G&lt;/td&gt; &lt;td&gt;3 G&lt;/td&gt; &lt;td&gt;4 4 4 4 G&lt;/td&gt; &lt;td&gt;1 H&lt;/td&gt; &lt;td&gt;222 H&lt;/td&gt; &lt;td &gt;1 I&lt;/td&gt; &lt;td&gt;1 J&lt;/td&gt; &lt;td&gt;2 J&lt;/td&gt; &lt;td&gt;3 J&lt;/td&gt; &lt;td&gt;4 J&lt;/td&gt; &lt;td&gt;1 K&lt;/td&gt; &lt;td&gt;2 2 K&lt;br&gt;more..&lt;br&gt;more..&lt;/td&gt; &lt;td &gt;1 L&lt;/td&gt; &lt;td&gt;1 M&lt;/td&gt; &lt;td&gt;22 M&lt;/td&gt; &lt;td&gt;333 M&lt;/td&gt; &lt;td&gt;4444 M&lt;/td&gt; &lt;td&gt;1 N&lt;/td&gt; &lt;td&gt;2 N&lt;/td&gt; &lt;td &gt;1 1 1 1 1 1 1 O&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td colspan="2"&gt;fixed 3&lt;/td&gt; &lt;td&gt;3&lt;/td&gt; &lt;td&gt;1 1 1 1 1 A&lt;/td&gt;&lt;td&gt;2 2 2 2 2 A&lt;/td&gt;&lt;td&gt;3 3 3 3 3 A&lt;/td&gt;&lt;td&gt;4 4 4 4 4 A&lt;/td&gt; &lt;td&gt;1 B&lt;/td&gt;&lt;td&gt;2 B&lt;/td&gt; &lt;td &gt;1 C&lt;/td&gt; &lt;td&gt;1 D&lt;/td&gt;&lt;td&gt;2 D&lt;/td&gt;&lt;td&gt;3 D&lt;/td&gt;&lt;td&gt;4 D&lt;br&gt;more...&lt;/td&gt; &lt;td&gt;1 E&lt;/td&gt;&lt;td&gt;2 E&lt;/td&gt; &lt;td &gt;1 F&lt;/td&gt; &lt;td&gt;1 1 1 G&lt;/td&gt;&lt;td&gt;2 2 G&lt;/td&gt;&lt;td&gt;3 G&lt;/td&gt;&lt;td&gt;4 4 4 4 G&lt;/td&gt; &lt;td&gt;1 H&lt;/td&gt;&lt;td&gt;222 H&lt;/td&gt; &lt;td &gt;1 I&lt;/td&gt; &lt;td&gt;1 J&lt;/td&gt;&lt;td&gt;2 J&lt;/td&gt;&lt;td&gt;3 J&lt;/td&gt;&lt;td&gt;4 J&lt;/td&gt; &lt;td&gt;1 K&lt;/td&gt;&lt;td&gt;2 2 K&lt;br&gt;more..&lt;br&gt;more..&lt;/td&gt; &lt;td &gt;1 L&lt;/td&gt; &lt;td&gt;1 M&lt;/td&gt;&lt;td&gt;22 M&lt;/td&gt;&lt;td&gt;333 M&lt;/td&gt;&lt;td&gt;4444 M&lt;/td&gt; &lt;td&gt;1 N&lt;/td&gt;&lt;td&gt;2 N&lt;/td&gt; &lt;td &gt;1 1 1 1 1 1 1 O&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td colspan="3"&gt;fixed 4&lt;/td&gt; &lt;td&gt;1 1 1 1 1 A&lt;/td&gt;&lt;td&gt;2 2 2 2 2 A&lt;/td&gt;&lt;td&gt;3 3 3 3 3 A&lt;/td&gt;&lt;td&gt;4 4 4 4 4 A&lt;/td&gt; &lt;td&gt;1 B&lt;/td&gt;&lt;td&gt;2 B&lt;/td&gt; &lt;td &gt;1 C&lt;/td&gt; &lt;td&gt;1 D&lt;/td&gt;&lt;td&gt;2 D&lt;/td&gt;&lt;td&gt;3 D&lt;/td&gt;&lt;td&gt;4 D&lt;br&gt;more...&lt;br&gt;more...&lt;br&gt;more...&lt;br&gt;more...&lt;/td&gt; &lt;td&gt;1 E&lt;/td&gt;&lt;td&gt;2 E&lt;/td&gt; &lt;td &gt;1 F&lt;/td&gt; &lt;td&gt;1 1 1 G&lt;/td&gt;&lt;td&gt;2 2 G&lt;/td&gt;&lt;td&gt;3 G&lt;/td&gt;&lt;td&gt;4 4 4 4 G&lt;/td&gt; &lt;td&gt;1 H&lt;/td&gt;&lt;td&gt;222 H&lt;/td&gt; &lt;td &gt;1 I&lt;/td&gt; &lt;td&gt;1 J&lt;/td&gt;&lt;td&gt;2 J&lt;/td&gt;&lt;td&gt;3 J&lt;/td&gt;&lt;td&gt;4 J&lt;/td&gt; &lt;td&gt;1 K&lt;/td&gt;&lt;td&gt;2 2 K&lt;br&gt;more..&lt;br&gt;more..&lt;/td&gt; &lt;td &gt;1 L&lt;/td&gt; &lt;td&gt;1 M&lt;/td&gt;&lt;td&gt;22 M&lt;/td&gt;&lt;td&gt;333 M&lt;/td&gt;&lt;td&gt;4444 M&lt;/td&gt; &lt;td&gt;1 N&lt;/td&gt;&lt;td&gt;2 N&lt;/td&gt; &lt;td &gt;1 1 1 1 1 1 1 O&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td colspan="3"&gt;fixed 5&lt;/td&gt; &lt;td&gt;1 1 1 1 1 A&lt;/td&gt;&lt;td&gt;2 2 2 2 2 A&lt;/td&gt;&lt;td&gt;3 3 3 3 3 A&lt;/td&gt;&lt;td&gt;4 4 4 4 4 A&lt;/td&gt; &lt;td&gt;1 B&lt;/td&gt;&lt;td&gt;2 B&lt;/td&gt; &lt;td &gt;1 C&lt;/td&gt; &lt;td&gt;1 D&lt;/td&gt;&lt;td&gt;2 D&lt;/td&gt;&lt;td&gt;3 D&lt;/td&gt;&lt;td&gt;4 D&lt;br&gt;more...&lt;/td&gt; &lt;td&gt;1 E&lt;/td&gt;&lt;td&gt;2 E&lt;/td&gt; &lt;td &gt;1 F&lt;/td&gt; &lt;td&gt;1 1 1 G&lt;/td&gt;&lt;td&gt;2 2 G&lt;/td&gt;&lt;td&gt;3 G&lt;/td&gt;&lt;td&gt;4 4 4 4 G&lt;/td&gt; &lt;td&gt;1 H&lt;/td&gt;&lt;td&gt;222 H&lt;br&gt;H&lt;br&gt;H&lt;br&gt;H&lt;br&gt;H&lt;/td&gt; &lt;td &gt;1 I&lt;/td&gt; &lt;td&gt;1 J&lt;/td&gt;&lt;td&gt;2 J&lt;/td&gt;&lt;td&gt;3 J&lt;/td&gt;&lt;td&gt;4 J&lt;/td&gt; &lt;td&gt;1 K&lt;/td&gt;&lt;td&gt;2 2 K&lt;br&gt;more..&lt;br&gt;more..&lt;/td&gt; &lt;td &gt;1 L&lt;/td&gt; &lt;td&gt;1 M&lt;/td&gt;&lt;td&gt;22 M&lt;/td&gt;&lt;td&gt;333 M&lt;/td&gt;&lt;td&gt;4444 M&lt;/td&gt; &lt;td&gt;1 N&lt;/td&gt;&lt;td&gt;2 N&lt;/td&gt; &lt;td &gt;1 1 1 1 1 1 1 O&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;6&lt;/td&gt; &lt;td&gt;6&lt;/td&gt; &lt;td&gt;6&lt;/td&gt; &lt;td&gt;1 1 1 1 1 A&lt;/td&gt;&lt;td&gt;2 2 2 2 2 A&lt;/td&gt;&lt;td&gt;3 3 3 3 3 A&lt;/td&gt;&lt;td&gt;4 4 4 4 4 A&lt;/td&gt; &lt;td&gt;1 B&lt;/td&gt;&lt;td&gt;2 B&lt;/td&gt; &lt;td &gt;1 C&lt;/td&gt; &lt;td&gt;1 D&lt;/td&gt;&lt;td&gt;2 D&lt;/td&gt;&lt;td&gt;3 D&lt;/td&gt;&lt;td&gt;4 D&lt;br&gt;more...&lt;/td&gt; &lt;td&gt;1 E&lt;/td&gt;&lt;td&gt;2 E&lt;/td&gt; &lt;td &gt;1 F&lt;/td&gt; &lt;td&gt;1 1 1 G&lt;/td&gt;&lt;td&gt;2 2 G&lt;/td&gt;&lt;td&gt;3 G&lt;/td&gt;&lt;td&gt;4 4 4 4 G&lt;/td&gt; &lt;td&gt;1 H&lt;/td&gt;&lt;td&gt;222 H&lt;/td&gt; &lt;td &gt;1 I&lt;/td&gt; &lt;td&gt;1 J&lt;/td&gt;&lt;td&gt;2 J&lt;/td&gt;&lt;td&gt;3 J&lt;/td&gt;&lt;td&gt;4 J&lt;/td&gt; &lt;td&gt;1 K&lt;/td&gt;&lt;td&gt;2 2 K&lt;br&gt;more..&lt;br&gt;more..&lt;/td&gt; &lt;td &gt;1 L&lt;/td&gt; &lt;td&gt;1 M&lt;/td&gt;&lt;td&gt;22 M&lt;/td&gt;&lt;td&gt;333 M&lt;/td&gt;&lt;td&gt;4444 M&lt;/td&gt; &lt;td&gt;1 N&lt;/td&gt;&lt;td&gt;2 N&lt;/td&gt; &lt;td &gt;1 1 1 1 1 1 1 O&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;br /&gt; &lt;!-- static size footer junk--&gt;&lt;!-- static size footer junk--&gt;&lt;!-- static size footer junk--&gt;&lt;!-- static size footer junk--&gt; &lt;table border="1" width="100%" cellspacing="1" cellpadding="0" align="center"&gt; &lt;tr&gt; &lt;td width="35%" align="left"&gt;footer junk left&lt;/td&gt; &lt;td &gt;- FOOTER JUNK MIDDLE -&lt;/td&gt; &lt;td width="35%" align="right"&gt;footer junk right&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/form&gt; &lt;/BODY&gt; &lt;/HTML&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload