
This jQuery plugin converts a properly formatted table, having thead and tbody elements (tfoot optional), into a scrollable table. Scrollable tables are most useful when having to display lots of tubular data in a fixed space.
Show Me The Money (Demo)
| city | state code | zip | latitude | longitude | county |
| 10 | 2 | 15 | - | - | 9 |
| Holtsville | NY | 00501 | 40.8152 | -73.0455 | Suffolk |
| Holtsville | NY | 00544 | 40.8152 | -73.0455 | Suffolk |
| Adjuntas | PR | 00601 | 18.1788 | -66.7516 | Adjuntas |
| Aguada | PR | 00602 | 18.381389 | -67.188611 | Aguada |
| Aguadilla | PR | 00603 | 18.4554 | -67.1308 | Aguadilla |
| Aguadilla | PR | 00604 | 18.4812 | -67.1467 | Aguadilla |
| Aguadilla | PR | 00605 | 18.429444 | -67.154444 | Aguadilla |
| Maricao | PR | 00606 | 18.182778 | -66.980278 | Maricao |
| Anasco | PR | 00610 | 18.284722 | -67.14 | Anasco |
| Angeles | PR | 00611 | 18.286944 | -66.799722 | Utuado |
| Arecibo | PR | 00612 | 18.4389 | -66.6924 | Arecibo |
| Arecibo | PR | 00613 | 18.1399 | -66.6344 | Arecibo |
| Arecibo | PR | 00614 | 18.1399 | -66.6344 | Arecibo |
| Bajadero | PR | 00616 | 18.428611 | -66.683611 | Arecibo |
| Barceloneta | PR | 00617 | 18.4525 | -66.538889 | Barceloneta |
Table Scroll Plugin Overview
The tablescroll jQuery plugin is a simple markup manipulation plugin, it will manipulate the table, create a couple of new elements and wrap everything in a DIV.
Using the plugin is pretty straight forward, when you download the plugin you can view the demo file to get up to speed and begin working with it immediately.
The HTML TABLE markup is also pretty basic:
<table id="thetable" cellspacing="0"> <thead> <tr> <td>city</td> <td>state code</td> <td>zip</td> <td>latitude</td> <td>longitude</td> <td>county</td> </tr> </thead> <tfoot> <tr> <td>city</td> <td>state code</td> <td>zip</td> <td>latitude</td> <td>longitude</td> <td>county</td> </tr> </tfoot> <tbody> <tr class="first"> <td>Holtsville</td> <td>NY</td> <td>00501</td> <td>40.8152</td> <td>-73.0455</td> <td>Suffolk</td> </tr> <tr> <td>Holtsville</td> <td>NY</td> <td>00544</td> <td>40.8152</td> <td>-73.0455</td> <td>Suffolk</td> </tr> <tr> <td>Adjuntas</td> <td>PR</td> <td>00601</td> <td>18.1788</td> <td>-66.7516</td> <td>Adjuntas</td> </tr> </tbody> </table>
Styling the table should go pretty smoothly, but be warned, the plugin does some width/height calculations which require the styles to be in place prior to doing the calculations.
Here is the demo CSS which should get you started:
.tablescroll {
font: 12px normal Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.tablescroll td,
.tablescroll_wrapper,
.tablescroll_head,
.tablescroll_foot {
border:1px solid #ccc;
}
.tablescroll td {
padding:3px 5px;
border-bottom:0;
border-right:0;
}
.tablescroll_wrapper {
background-color:#fff;
border-left:0;
}
.tablescroll_head,
.tablescroll_foot {
background-color:#eee;
border-left:0;
border-top:0;
font-size:11px;
font-weight:bold;
}
.tablescroll_head {
margin-bottom:3px;
}
.tablescroll_foot {
margin-top:3px;
}
.tablescroll tbody tr.first td {
border-top:0;
}
The plugin is basic and only has a few options:
$.fn.tableScroll.defaults =
{
flush: true, // makes the last thead and tbody column flush with the scrollbar
width: null, // width of the table (head, body and foot), null defaults to the tables natural width
height: 100, // height of the scrollable area
containerClass: 'tablescroll' // the plugin wraps the table in a div with this css class
};
Like most jQuery plugins, implementation is a snap:
jQuery(document).ready(function($)
{
$('#thetable').tableScroll({height:200});
// other examples
// sets the table to have a scrollable area of 200px
$('#thetable').tableScroll({height:200});
// sets a hard width limit for the table, setting this too small
// may not always work
$('#thetable').tableScroll({width:400});
// by default the plugin will wrap everything in a div with this
// css class, if it finds that you have manually wrapped the
// table with a custom element using this same css class it
// will forgo creating a container DIV element
$('#thetable').tableScroll({containerClass:'myCustomClass'});
});
Like many projects, we developers build out of necessity. I couldn’t quite find what I needed, so i wrote my own! This plugin accomplished all of what I needed, and I thought it useful enough that I would share. If you have any feature requests and/or bug reports please let me know. And the plugin name is pretty generic too (if you have a better one, feel free to drop me a line).
I’ve tested the plugin on Windows with Chrome, FF 3.6, IE 6, IE 8, Safari 4. If anyone is on a Mac, please let me know what your results are?
Download
jQuery TableScroll plugin, this project is on github

Please check in IE when there is only one row in the table… scroller gets messed up….
Awesome plugin, but I have the same problem – when there is only one row in IE or Chrome, the table properties don’t show and the scroller is messed up. Any suggestions?
Has anyone tried altering this plugin to fix the column alignment issues in Internet Explorer?
I was thinking of spending some time on it but don’t want to waste my time if it’s not fixable.
Any feedback would be appreciated.
Very nice, however doesn’t work with colspans in the Header (Multi-row header leading with some colspans)
Hi, this plug-in is great, but it hides the table“s border, how can i solve this (i think) issue.
Thankss
We have implemented on gridview in asp.net. All looks good except for paging within footer. Paging functionality works but, page numbers are unequally spaced across footer and we can’t seem to control them with the style. Any suggestions
There is an issue when the table does not have enough rows in it to force a scroll. Then it does not work.
Does anyone know if this works on ipad?
Thanks!
Sorry, more specifically, i am trying to use the ‘-webkit-overflow-scrolling: touch’ property and it does not seem to be working(it scrolls but not the way this property should)
Thanks again!
In IE8:
Radio buttons within tags do not display as checked. They are clickable, but there is a jQuery[some #]=”13″ attribute on the input element that seems to break. Do you have any idea why this is or how to fix it?
Thanks.
Give this text in the first column of first row of table body – ‘Its a laaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarge text’ and let me know if the table is aligned properly
Hi Dimas,
Great Work!!!
One question, in my implementation, the table is dynamically created based on user’s input.
Is it possible to use your library in my case?
If so, could you give me a tip?
Would it be possible to use this for horizontal scrolling as well ?
not working in colspans
This is broken in query-1.9.
when I reapplie the function, he resize well the body table, but don’t resize the header.
Tested on IE6, IE9, FF.