11548 sujets

JavaScript, DOM et API Web HTML5

Hello tout le monde,

Je bosse sur le site d'un tennis club, j'utilise le plugin Datatables (http://www.datatables.net/index) pour construire un tableau des membres du club avec leur nom, classement et sexe.

Le souci est que le plugin trie mal les classements, sachant que les classements français de tennis fonctionne ainsi (du niveau de ma grand-mère à Federer) :

NC, 40, 30/5, 30/4, ..., 30/1, 30, 15/5, 15/4,..., 15/1, 15, 5/6, 4/6,..., 1/6, 0, -2/6, -4/6, ...

J'ai essayé de poster sur leur forum et le développeur m'a répondu qu'on pouvait modifier le plugin pour qu'il réponde à mes attentes et m'a renvoyé vers 2 pages :

Docs: http://datatables.net/development/sorting
Examples: http://datatables.net/plug-ins/sorting

Etant donné que je suis une buse en JS celà ne m'aide pas trop voir pas du tout, donc si quelqu'un à les compétences pour m'aider, je lui en saurais gré tout ma vie Smiley lol Smiley lol Smiley lol
Modifié par ryosanisback (29 May 2012 - 13:20)
Modérateur
Bonjour!

ryosanisback a écrit :
(du niveau de ma grand-mère à Federer)

Ta grand mère est licensiée? wouaa! mais revenons à nos poules:

ryosanisback a écrit :

NC, 40, 30/5, 30/4, ..., 30/1, 30, 15/5, 15/4,..., 15/1, 15, 5/6, 4/6,..., 1/6, 0, -2/6, -4/6, ...

Je suis pas sûr d'avoir bien compris, mais visiblement, c'est un ordre alphabétique non? Dur dur d'aider sans comprendre.
le développeur m'a demandé si j'avais un algorithme qui "stipule" que 40 < 30/5 < 30/4 ...

la bonne blague Smiley lol

je crois que je vais devoir abandonner mon idée de tableau Smiley decu
l'idée c'était de pouvoir trier la colonne des classements pour avoir tous les classements 40 ensemble, tous les 30/5, ...
Modérateur
En même temps ça:
a écrit :
40 < 30/5 < 30/4

C'est de l'ordre alphabétique, enfin à l'inverse.
je reviens Smiley biggol

toujours avec le plugin datatables

sur les conseils du développeur j'ai créé l'algorithme (qui va révolutionner le web Smiley biggol )

le voici :

var ranking = new Array();
ranking['-30'] = 1;
ranking['-15'] = 2;
ranking['-4/6'] = 3;
ranking['-2/6'] = 4;
ranking['0'] = 5;
ranking['1/6'] = 6;
ranking['2/6'] = 7;
ranking['3/6'] = 8;
ranking['4/6'] = 9;
ranking['5/6'] = 10;
ranking['15'] = 11;
ranking['15/1'] = 12;
ranking['15/2'] = 13;
ranking['15/3'] = 14;
ranking['15/4'] = 15;
ranking['15/5'] = 16;
ranking['30'] = 17;
ranking['30/1'] = 18;
ranking['30/2'] = 19;
ranking['30/3'] = 20;
ranking['30/4'] = 21;
ranking['30/5'] = 22;
ranking['40'] = 23;
ranking['NC'] = 24;
jQuery.fn.dataTableExt.oSort['ranking-sort-asc'] = function(a,b) {
a = a.toLowerCase();
b = b.toLowerCase();
return ((ranking[a] < ranking[b]) ? -1 : ((ranking[a] > ranking[b]) ? 1 : 0));
};
jQuery.fn.dataTableExt.oSort['ranking-sort-desc'] = function(a,b) {
a = a.toLowerCase();
b = b.toLowerCase();
return ((ranking[a] < ranking[b]) ? 1 : ((ranking[a] > ranking[b]) ? -1 : 0));
};


Le problème c'est que je ne sais pas comment l'intégrer à ma page html pour le faire fonctionner.

Le développeur m'a renvoyé vers cette page pour son utilisation :

http://datatables.net/release-datatables/examples/plug-ins/sorting_sType.html

mais comme je suis toujours une buse en JS je ne vois pas ce que je dois faire / modifier

j'ai besoin de vos sciences Smiley langue [/b][/b][/b][/b]
Modifié par ryosanisback (30 May 2012 - 13:33)
avec tablesorter, là où tu avais trouvé l'exemple :
tu crées une nouvelle règle de tri
$.tablesorter.addParser({ 
        id: 'grades', //nom de la règle 
        is: function(s) {  
            return false; 
        }, 
        format: function(s) { 
            return s.toLowerCase().replace(/-30/,1).replace(/-15/,2).replace(/-4\/6/,3).etc...; //définition de la règle
        }, 
        type: 'numeric' 
    }); 


puis tu l'intègre a ton tableau :
$(function() { 
        $("nomdutableau").tablesorter({ 
            headers: { 
                nulmerodecolonneoulareglesapplique: { 
                    sorter:'grades' //le nom utilisé comme id quand tu crées la règle
                } 
            } 
        }); 
    }); 
pffffffffff ca me trie toujours à l'arrache Smiley sweatdrop

je dois sûrement faire une erreur.

voici le code de mon tableau :

<table class="tablesorter">
        <thead>
          <tr>
            <th>Nom</th>
            <th>Classement</th>
            <th>Sexe</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Joueur 1</td>
            <td>15</td>
            <td>Masculin</td>
          </tr>
          <tr>
            <td>Joueur 2</td>
            <td>2/6</td>
            <td>Féminin</td>
          </tr>
          <tr>
            <td>Joueur 3</td>
            <td>5/6</td>
            <td>Masculin</td>
          </tr>
          <tr>
            <td>Joueur 4</td>
            <td>15/3</td>
            <td>Féminin</td>
          </tr>
          <tr>
            <td>Joueur 5</td>
            <td>15/1</td>
            <td>Masculin</td>
          </tr>
          <tr>
            <td>Joueur 6</td>
            <td>15/2</td>
            <td>Féminin</td>
          </tr>
          <tr>
            <td>Joueur 7</td>
            <td>NC</td>
            <td>Féminin</td>
          </tr>
          <tr>
            <td>Joueur 8</td>
            <td>5/6</td>
            <td>Masculin</td>
          </tr>
          <tr>
            <td>Joueur 9</td>
            <td>15/3</td>
            <td>Masculin</td>
          </tr>
          <tr>
            <td>Joueur 10</td>
            <td>30/1</td>
            <td>Masculin</td>
          </tr>
          <tr>
            <td>Joueur 11</td>
            <td>15/5</td>
            <td>Féminin</td>
          </tr>
          <tr>
            <td>Joueur 12</td>
            <td>-4/6</td>
            <td>Masculin</td>
          </tr>
        </tbody>
      </table>


Le JS en bas de page :

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="js/ddsmoothmenu.js"></script>
<script type="text/javascript" src="js/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="js/tipsy.js"></script>
<script type="text/javascript" src="js/scripts.js"></script>
<script type="text/javascript">
$.tablesorter.addParser({ 
        id: 'grades', //nom de la règle 
        is: function(s) {  
            return false; 
        }, 
        format: function(s) { 
            return s.toLowerCase().replace(/-30/,1).replace(/-15/,2).replace(/-4\/6/,3).replace(/-2\/6/,4).replace(/0/,5).replace(/1\/6/,6).replace(/2\/6/,7).replace(/3\/6/,8).replace(/4\/6/,9).replace(/5\/6/,10).replace(/15/,11).replace(/15\/1/,12).replace(/15\/2/,13).replace(/15\/3/,14).replace(/15\/4/,15).replace(/15\/5/,16).replace(/30/,17).replace(/30\/1/,18).replace(/30\/2/,19).replace(/30\/3/,20).replace(/30\/4/,21).replace(/30\/5/,22).replace(/40/,23).replace(/NC/,24); //définition de la règle
        }, 
        type: 'numeric' 
    });

$(function() { 
        $("table").tablesorter({ 
            headers: { 
                2: { 
                    sorter:'grades' //le nom utilisé comme id quand tu crées la règle
                } 
            } 
        }); 
    });
</script>


Qu'est ce qui cloche ????

Merci en tout cas,

Ryo
Modifié par ryosanisback (30 May 2012 - 14:27)
attention, le 2 correspond à la troisième colonne !

chez toi il faut mettre :
 1: { 
                    sorter:'grades' //le nom utilisé comme id quand tu crées la règle
                }