DataTables scrolling and jQuery UI tabs

# Preamble

This example shows how DataTables with scrolling can be used together with jQuery UI tabs (or indeed any other method whereby the table is in a hidden (display:none) element when it is initialised). The reason this requires special consideration, is that when DataTables is initialised and it is in a hidden element, the browser doesn't have any measurements with which to give DataTables, and this will require in the misalignment of columns when scrolling is enabled.

The method to get around this is to call the fnAdjustColumnSizing API function. This function will calculate the column widths that are needed based on the current data and then redraw the table - which is exactly what is needed when the table becomes visible for the first time. For this we use the 'show' method provided by jQuery UI tables. We check to see if the DataTable has been created or not (note the extra selector for 'div.dataTables_scrollBody', this is added when the DataTable is initialised). If the table has been initialised, we re-size it. An optimisation could be added to re-size only of the first showing of the table.

# Live example

- Trident browsers
- Gecko browsers

Rendering engine | Browser | Platform(s) | Engine version | Grade
--- | --- | --- | --- | ---
Rendering engine | Browser | Platform(s) | Engine version | Grade
Trident | Internet Explorer 4.0 | Win 95+ | 4 | X
Trident | Internet Explorer 5.0 | Win 95+ | 5 | C
Trident | Internet Explorer 5.5 | Win 95+ | 5.5 | A
Trident | Internet Explorer 6 | Win 98+ | 6 | A
Trident | Internet Explorer 7 | Win XP SP2+ | 7 | A
Trident | AOL browser (AOL desktop) | Win XP | 6 | A

Rendering engine | Browser | Platform(s) | Engine version | Grade
--- | --- | --- | --- | ---
Rendering engine | Browser | Platform(s) | Engine version | Grade
Gecko | Firefox 1.0 | Win 98+ / OSX.2+ | 1.7 | A
Gecko | Firefox 1.5 | Win 98+ / OSX.2+ | 1.8 | A
Gecko | Firefox 2.0 | Win 98+ / OSX.2+ | 1.8 | A
Gecko | Firefox 3.0 | Win 2k+ / OSX.3+ | 1.9 | A
Gecko | Camino 1.0 | OSX.2+ | 1.8 | A
Gecko | Camino 1.5 | OSX.3+ | 1.8 | A
Gecko | Netscape 7.2 | Win 95+ / Mac OS 8.6-9.2 | 1.7 | A
Gecko | Netscape Browser 8 | Win 98SE+ | 1.7 | A
Gecko | Netscape Navigator 9 | Win 98+ / OSX.2+ | 1.8 | A
Gecko | Mozilla 1.0 | Win 95+ / OSX.1+ | 1 | A
Gecko | Mozilla 1.1 | Win 95+ / OSX.1+ | 1.1 | A
Gecko | Mozilla 1.2 | Win 95+ / OSX.1+ | 1.2 | A
Gecko | Mozilla 1.3 | Win 95+ / OSX.1+ | 1.3 | A
Gecko | Mozilla 1.4 | Win 95+ / OSX.1+ | 1.4 | A
Gecko | Mozilla 1.5 | Win 95+ / OSX.1+ | 1.5 | A
Gecko | Mozilla 1.6 | Win 95+ / OSX.1+ | 1.6 | A
Gecko | Mozilla 1.7 | Win 98+ / OSX.1+ | 1.7 | A
Gecko | Mozilla 1.8 | Win 98+ / OSX.1+ | 1.8 | A
Gecko | Seamonkey 1.1 | Win 98+ / OSX.2+ | 1.8 | A
Gecko | Epiphany 2.20 | Gnome | 1.8 | A

# Initialisation code

    $(document).ready(function() {
    	$("#tabs").tabs( {
    		"show": function(event, ui) {
    			var oTable = $('div.dataTables_scrollBody>table.display', ui.panel).dataTable();
    			if ( oTable.length > 0 ) {
    				oTable.fnAdjustColumnSizing();
    			}
    		}
    	} );

    	$('table.display').dataTable( {
    		"sScrollY": "200px",
    		"bScrollCollapse": true,
    		"bPaginate": false,
    		"bJQueryUI": true,
    		"aoColumnDefs": [
    			{ "sWidth": "10%", "aTargets": [ -1 ] }
    		]
    	} );
    } );

# Other examples

## Basic initialisation

- Zero configuration
- Feature enablement
- Sorting data
- Multi-column sorting
- Multiple tables
- Hidden columns
- DOM positioning
- State saving
- Alternative pagination styles
- Scrolling: Horizontal / Vertical / Both / Themed / Infinite
- Change language information (internationalisation)
- ThemeRoller themes (Smoothness)

## Advanced initialisation

- Events (pre initialisation)
- Events (post initialisation)
- Column rendering
- Sorting without HTML tags
- Multiple table controls (sDom)
- Defining length menu options
- Custom toolbar (element) around table
- Row highlighting with CSS
- Column grouping through col/row spans
- Row grouping
- Row callback
- Footer callback
- Change language information from a file (internationalisation)

## Data sources

- DOM
- Javascript array
- Ajax source
- Server side processing

## Server-side processing

- Obtain server-side data
- Add extra HTTP variables
- Use HTTP POST
- Custom column ordering (in callback data)
- Pipelining data (reduce Ajax calls for paging)
- Show and hide details about a particular record
- User selectable rows (multiple rows)

## API

- Dynamically add a new row
- Individual column filtering (using "input" elements)
- Individual column filtering (using "select" elements)
- Highlight rows and columns
- Show and hide details about a particular record
- User selectable rows (multiple rows)
- User selectable rows (single row) and delete rows
- Editable rows (with jEditable)
- Submit form with elements in table
- Index column (static number column)
- Show and hide columns dynamically
- API function use in initialisation object (callback)
- DataTables scrolling and tabs
- Regular expression filtering

## Plug-ins

- Add custom API functions
- Sorting and type detection
- Custom pagination controls
- Range filtering / custom filtering
- Live DOM sorting
- Automatic HTML type detection

Please refer to the DataTables documentation for full information about its API properties and methods.