fnGetAdjacentTr

Get the adjacent tr element for a row.

Due to the fact that DataTables moves DOM elements around (mainly tr elements for sorting and filtering) it can at times be a little tricky to get the next row based on another, while taking into account pagination, filtering, sorting etc.

This function is designed to address exactly this situation. It takes two parameters, the target node, and a boolean indicating if the adjacent row retrieved should be the next (true, or no value) or the previous (false).

Plug-in code

jQuery.fn.dataTableExt.oApi.fnGetAdjacentTr  = function ( oSettings, nTr, bNext )
{
    /* Find the node's position in the aoData store */
    var iCurrent = oSettings.oApi._fnNodeToDataIndex( oSettings, nTr );

    /* Convert that to a position in the display array */
    var iDisplayIndex = $.inArray( iCurrent, oSettings.aiDisplay );
    if ( iDisplayIndex == -1 )
    {
        /* Not in the current display */
        return null;
    }

    /* Move along the display array as needed */
    iDisplayIndex += (typeof bNext=='undefined' || bNext) ? 1 : -1;

    /* Check that it within bounds */
    if ( iDisplayIndex < 0 || iDisplayIndex >= oSettings.aiDisplay.length )
    {
        /* There is no next/previous element */
        return null;
    }

    /* Return the target node from the aoData store */
    return oSettings.aoData[ oSettings.aiDisplay[ iDisplayIndex ] ].nTr;
};

CDN

This plug-in is available on the DataTables CDN:

JS

Note that if you are using multiple plug-ins, it is beneficial in terms of performance to combine the plug-ins into a single file and host it on your own server, rather than making multiple requests to the DataTables CDN.

Version control

If you have any ideas for how this plug-in can be improved, or spot anything that is in error, it is available on GitHub and pull requests are very welcome!

Example

$(document).ready(function() {
      var table = $('#example').dataTable();

      var n1 = $('#example tbody tr').eq(2)[0];
      var next = table.fnGetAdjacentTr( n1 );
      var prev = table.fnGetAdjacentTr( n1, false );
  } );