jQuery: pagination

more at: http://web.enavu.com/tutorials/making-a-jquery-pagination-system/

by Muthuraman B

HTML

<table id="listTable" width="100%" class="table fundOnboardingReport" border="0">
  <thead>
    <tr>
      <th class="placeholder">REQ ID</th>
      <th class="placeholder">COUNTERPARTY</th>
      <th class="placeholder">CLIENT LEGAL ENTITY NAME</th>
      <th class="placeholder">LEI</th>
      <th class="placeholder">GO-LIVE DATE</th>
      <th class="placeholder">STATUS</th>
      <th class="placeholder">ASSIGNEES</th>
      <th>&nbsp;</th>
    </tr>
  </thead>
  <tbody>
    <tr class="graybg">
      <td><a>NFL00001</a></td>
      <td>JPMorgan EMEA Client Onboarding</td>
      <td><a>Walmart Retirement Savings Fund</a></td>
      <td>XXXXXXXXXXXXXXXX</td>
      <td><a data-toggle="modal" data-target="#goLiveDatePopup">View All</a></td>
      <td>Completed</td>
      <td>2 <div class="iconAssignees" data-toggle="modal" data-target="#assigneesPopup"><img src="~/images/assignee.png" /></div></td>
      <td class="f105">&nbsp;</td>
    </tr>
    <tr style="display:none;">
      <td colspan="8" class="text-center">Detail Empty</td>
    </tr>
    <tr class="graybg">
      <td><a>NFL00001</a></td>
      <td>JPMorgan EMEA Client Onboarding</td>
      <td><a>Walmart Retirement Savings Fund</a></td>
      <td>XXXXXXXXXXXXXXXX</td>
      <td><a data-toggle="modal" data-target="#goLiveDatePopup">View All</a></td>
      <td>Completed</td>
      <td>2 <div class="iconAssignees" data-toggle="modal" data-target="#assigneesPopup"><img src="~/images/assignee.png" /></div></td>
      <td class="f105">&nbsp;</td>
    </tr>
    <tr style="display:none;">
      <td colspan="8" class="text-center">Detail Empty</td>
    </tr>
    <tr class="graybg">
      <td><a>NFL00001</a></td>
      <td>JPMorgan EMEA Client Onboarding</td>
      <td><a>Walmart Retirement Savings Fund</a></td>
      <td>XXXXXXXXXXXXXXXX</td>
      <td><a data-toggle="modal" data-target="#goLiveDatePopup">View All</a></td>
      <td>Completed</td>
      <td>2 <div class="iconAssignees" data-toggle="modal"...

CSS

.controls a{
    padding:3px;
    border:1px solid gray;
    margin:2px;
    color:black;
    text-decoration:none
}
.active{
    background:darkblue;
    color:white !important;
}

JavaScript

$(document).ready(function() {

    var show_per_page = 1;
    var number_of_items = $('#listTable').find('tr.graybg').size();
    var number_of_pages = Math.ceil(number_of_items / show_per_page);

    $('body').append('<div class=controls></div><input id=current_page type=hidden><input id=show_per_page type=hidden>');
    $('#current_page').val(0);
    $('#show_per_page').val(show_per_page);

    var navigation_html = '<a class="prev" onclick="previous()">Prev</a>';
    var current_link = 0;
    while (number_of_pages > current_link) {
        navigation_html += '<a class="page" onclick="go_to_page(' + current_link + ')" longdesc="' + current_link + '">' + (current_link + 1) + '</a>';
        current_link++;
    }
    navigation_html += '<a class="next" onclick="next()">Next</a>';

    $('.controls').html(navigation_html);
    $('.controls .page:first').addClass('active');

    $('#listTable').find('tr.graybg').css('display', 'none');
    $('#listTable').find('tr.graybg').slice(0, show_per_page).css('display', 'block');

});

function go_to_page(page_num) {
    var show_per_page = parseInt($('#show_per_page').val(), 0);

    start_from = page_num * show_per_page;

    end_on = start_from + show_per_page;

    $('#listTable').find('tr.graybg').css('display', 'none').slice(start_from, end_on).css('display', 'block');

    $('.page[longdesc=' + page_num + ']').addClass('active').siblings('.active').removeClass('active');

    $('#current_page').val(page_num);
}



function previous() {

    new_page = parseInt($('#current_page').val(), 0) - 1;
    //if there is an item before the current active link run the function
    if ($('.active').prev('.page').length == true) {
        go_to_page(new_page);
    }

}

function next() {
    new_page = parseInt($('#current_page').val(), 0) + 1;
    //if there is an item after the current active link run the function
    if ($('.active').next('.page').length == true) {
        go_to_page(new_page);
    }

}