FixedColumns 3.0.0

DataTables CDN files for FixedColumns 3.0.0. This software was originally released on 30th January, 2014.

Release notes

This is the third major release of FixedColumns, and this new version sees a significant change in how FixedColumns layouts out the fixed columns. The whole table is now shown as a single scrollable viewport, rather than being broken into multiple scrolling containers (technically it is still in three parts, but visually it is a single scrolling viewport).

This change also sees full compatibility with DataTables 1.10, harmonisation with the other DataTables extensions in file name, directory structure and base features. It also removes support for IE6/7.

New features

  • New: License is now MIT
  • New: Significant update in therms of how FixedColumns operates - no longer will it set the column visibility for the columns to be fixed, and instead just places the fixed columns on top of the target columns (similar to how FixedHeader works).
  • New: AMD module support. FixedColumns is available under the named module datatables-fixedcolumns now
  • New: Full integration with DataTables 1.10
  • New: DataTables 1.10 will prefer camcelCase notation - providing compatibility for FixedColumns here
    • This is conditional on the DataTables method being present - mapping is not done if it is not.
  • New: Bower support - available under the name datatables-fixedcolumns
  • New: Add support for DataTables hidden columns
  • New: Add fnGetPosition function to work exactly the same way as DataTables own fnGetPosition, but in this case taking into account elements from the cloned tables.
  • New: FixedColumns now uses the column width defined by DataTables exclusively
    • This means that the following options have been removed
    • sLeftWidth
    • iLeftWidth
    • sRightWidth
    • iRightWidth
  • New: Alter column sizes dynamically when DataTables does
  • New: The fixed columns can be used for scrolling! Both x-scrolling (which works using the mousewheel event) and y-scrolling (which is natural scrolling) will work now, which will make the interaction a lot less confusing for end users.
  • New: The scrollbar when fixing a right column is no longer in the middle of the table (which is the main reason for changing the column visibility method to the new overlay) - it is now where you would expect on the right of the table.
  • New: When using sAjaxSource in DataTables with FixedColumns, you used to need to put the FixedColumns initialisation into fnInitComplete - however, that's rather non-obvious and a pain even when you do know. FixedColumns will now detect this situation and hook into the DataTables events automatically, so FixedColumns can now be declared consecutively as would be expected in all cases.
  • New: Add readme to repo
  • New example: ColVis integration example.
  • New example: Twitter Bootstrap integration with FixedColumns


  • Update - dropping support for IE6/7 - IE8 is still supported and works fine.
    • Removing the old $.browser checks for old IE support
  • Update: Use $().on for events
  • Update: The markup for the left column is not subjected to the same treatment as the right - i.e. it is not used at all if not needed. This addresses a rendering issue in Safari as well where the left scrollbar could be hidden in right fixed column tables.
  • Update: Improvements to the fnRedrawLayout method will not 'regrab' the column sizes from DataTables, apply them and redraw the layout when fnRedrawLayout is called.
  • Update: Confirming to the standard DataTables namespace for plug-ins and file names
    • DataTables plug-ins should be named dataTables.{plugin}.js for consistency between the version plug-ins.
    • DataTables plug-ins should be attached to $.fn.dataTable to avoid polluting the global namespace.
  • Update: Documentation comments updated to use camelCase
    • Since camelCase will be preferred in DataTables 1.10, plug-ins will also promote its use in preference to Hungarian notation. Updated the documentation comments to that effect here.
  • Update: Performance - Split the reading of row heights from the setting of heights so the display is only invalidated once
  • Update: Example - Server-side processing example updated to remove the use of fnInitComplete since that is no longer needed.


  • Fix: FixedColumns wasn't taking into account that there can be TH elements in the TBODY these days in DataTables - thus is was skipping TH elements when calculating the widths to apply to the frozen columns, resulting in the sizes applied bying shifted by the number of TH elements used in the row. The fix is to use a selector that also pulls in TH elements. We could use the DataTables internal method _fnGetTdNodes (and ultimatily that will be the best thing to do), but for the moment we modify the selector to retail DT1.8 compatibility for FixedCOlumns.
  • Fix: Columns should have the inner width applied to them, while the grid boxes need the outer widths - 9744
  • Fix: When cloning the inner header element for the scrolling body table (the hidden column) we were working directly with the header cell for the column, rather than a clone. This meant that we were manipulating the 'real' header, rather than a throw away clone, resulting is all sorts of problems when trying to access the real header later on - 9596
  • Fix: Update class comment for markdown parsing in JSDoc
  • Fix: JSHint fixes
    • Remove trailing white space
    • Resolve undefined variables
    • Fix mixed tabs and spaces
  • Fix: The overflow calculation doesn't take into account the scrollbars
  • Fix: Right column blocker above the vertical scrollbar was being shown based on horizontal scrolling rather than vertical as it should be
  • Fix #9: The fixed column prevents click events from reaching the scrollbar
  • Fix: Add support for destroying a DataTable
  • Fix: Need to account for table border when calculating cell widths
  • Fix: Remove id attribute from cloned TR elements
  • Fix: Use jQuery's ability to deep copy data and events - 18761
  • Fix: Use class names from DataTables - 18761
  • Fix: Examples - Displayed initialisation code didn't match used code