Paginer une table avec JS/Jquery

Classé dans : Programmation | 0

L’exemple dans ce post propose une solution pour paginer une table HTML directement en Javascript/Jquery.

L’idée c’est charger l’ensemble des lignes en une seule requête. Ensuite c’est les fonctions Javascript qui affiche/masque les lignes en fonction de la pagination.

Tout se passe coté navigateur.

Il existe de nombreuses api sur Internet qui réalise ce genre de traitement. Comme toujours mon but étant l’apprentissage, je me suis imposer de créer une api qui est intégrée dans mon framework maison MyMVC.

Prérequis

  • Une table HTML avec un TBODY et un ID associé
  • Toute les lignes (TR) à paginer devront être dans le TBODY
  • 2 boutons pour ‘Page suivante’ et ‘Page précédente’
  • Jquery

Init de la pagination

On utilise ici la classe MyMVC_Pagination

MyMVC_Pagination.init(
  'myTbody' ,  // id du tbody de la table 
   10 ,  // nb lignes par page
  'idBtNext' , // id du bouton page suivante
  'idBtPrevious',  // id du bouton page précédente
   true|false , // masquage auto des boutons ? 
   callbackFunc // fonction callback appelée à chaque changement de page 
);

NB : La fonction callback reçoit en entrée les paramètres : nbPages , currentPage, firstLine, lastLine

Exemple de code HTML

<table>
<tr>
  <td>N°</td>
  <td>Nom</td>
  <td>Email</td>
</tr>
<!-- section TBODY -->
<tbody id="idTBody">
  <tr>
    <td>1</td>
    <td>Paul</td>
    <td>paul@fff.com</td>
  </tr>
  <tr>
    <td>2</td>
    <td>Marc</td>
    <td>marc@fff.com</td>
  </tr>
  <tr>
    <td>3</td>
    <td>fabienne</td>
    <td>fabienne@fff.com</td>
  </tr>
  .....
</tbody>
<!-- fin de section -->
</table>
<button id="bt_previousPage">Page -1</button>
<button id="bt_nextPage">Page +1</button>
</table>

Pour le code HTML ci-dessus, l’init de la pagination se ferait avec : MyMVC_Pagination.init('idTbody',10,'bt_nextPage','bt_previousPage',true,updateFooterPage)

La fonction de callback permet de mettre à jour le footer avec la mention : Page x / y

function updateFooterPage(_nbPage, _currentPage, _first, _last) {
  $("footerPage").html(
  "Page "+_currentPage+"/"+_nbPage
);
}