Ma structure de table est comme ci-dessous:
C’est mon HTML:
Location Full Name Amount Asset Patron ID User Date/Time Salem Bob galvin $3400 assert1 1148 sjauser 11/12 10:39 AM chennai sally n safer $400 sdfsdgt1 4747 sjauser 11/12 10:39 AM Mazdgfdg afdagadg 789769 qwqeqe 47467 sjauser 11/12 10:39 AM hurtyry afadfadg $12000 afadsf 25426546 sjauser 11/12 10:39 AM
Lorsque je clique sur l’en-tête “Montant”, les valeurs des montants (3400 $, 400 $, 12 000 $) doivent être sortingées, etc. Comme ce champ Date / Heure doit également être sortingé en fonction de la valeur.
J’ai utilisé le plugin Tablesorter mais ce plugin ne sortinge pas toutes les colonnes. Il ne sortinge pas les en-têtes de la dernière colonne et de la deuxième ligne dans cette table. J’ai également utilisé le plugin Tinysort mais cela change la structure de la table lors du sorting.
Je ne peux pas changer la structure de la table car c’est la principale exigence de notre client. S’il vous plaît fournir un guide sur ce problème de sorting qui est très utile pour moi.
Tout sorting personnalisé que nous pouvons appliquer signifie s’il vous plaît suggérer comment puis-je le faire.
Vous voulez probablement que les deux lignes de chaque entrée restnt groupées, auquel cas Tablesorter n’est pas conçu pour faire ce que vous voulez. Tinysort pourrait toutefois fonctionner si vous êtes prêt à placer chaque paire de rangées dans son propre tbody
:
Location Full Name Amount Asset Patron ID User Date/Time Salem Bob galvin $3400 assert1 1148 sjauser 11/12 10:39 AM chennai sally n safer $400 sdfsdgt1 4747 sjauser 11/12 10:39 AM ...
Comme Tinysort peut apparemment sortinger n’importe quel type d’élément, vous devriez pouvoir lui indiquer de sortinger les éléments tbody
au lieu des rangées. Votre script pourrait faire quelque chose comme ceci, vaguement basé sur l’exemple de table dans la documentation Tinysort:
$(document).ready(function() { var aAsc = []; $("#jackpotwatch>thead th").each(function(nr) { $(this).click(function() { aAsc[nr] = aAsc[nr] == 'asc' ? 'desc' : 'asc'; $("#jackpotwatch>tbody").tsort('td:eq(' + nr + ')', {order: aAsc[nr]}); }); }); });
Cela repose sur le fait qu’il y a exactement le même nombre de cellules dans les lignes d’en-tête que dans les lignes de chaque tbody.
Voir la démo ici.
Je n’ai pas de plugin pour vous, mais j’ai proposé l’approche suivante pour votre situation spécifique:
/** * This approach assumes that records are always comprised of 2 rows. It is possible to make this configurable. */ ;(function() { //Get the table var table = $("#jackpotwatch"); //Make head header in the THEAD sortable. $("thead th", table).on("click", onSortableClicked); //Handle the sortable clicked event. function onSortableClicked(e) { //Find the column position. var c = -1, child = e.target; while ((child = child.previousSibling) != null) if (child.nodeType == 3) ++c; //Find the row position. var r = -1, child = e.target.parentNode; while ((child = child.previousSibling) != null) if (child.nodeType == 3) ++r; var subject = $("tbody", table); var replacement = sort(subject, r, c); subject.replaceWith(replacement); } function sort(subject, r, c) { var rows = $("tr", subject); //Get all the rows from the tbody. var sorted = document.createElement("tbody"); var vals = []; for (var i = 0; i < rows.length; i+=2) { var record = [rows.get(i), rows.get(i+1)]; //Record is two rows. var sub = record[r].children[c].innerText; //This is our sort subject. vals.push({"sub": sub, "record": record}); } vals.sort(compare); for (var i = 0; i < vals.length; ++i) { var val = vals[i]; sorted.appendChild(val.record[0]); sorted.appendChild(val.record[1]); } return sorted; } function compare(a, b) { var atext = a.sub.toLowerCase(); var btext = b.sub.toLowerCase(); return atext < btext ? -1 : atext > btext ? 1 : 0; } })();
Cela rend chaque élément TH
élément THEAD
sortingable. Il les sortinge sur la base d’une comparaison textuelle, minuscule.
Il est difficile de ne travailler qu’avec des enregistrements de deux ensembles de lignes. Toutefois, il peut être développé pour permettre de configurer le nombre de lignes constituant un seul enregistrement, ou même de le déduire automatiquement en comptant le nombre de lignes du THEAD
.
Je l’ai utilisé sur le code HTML suivant:
Location Full Name Amount Asset Patron ID User Date/Time Salem Bob galvin $3400 assert1 1148 sjauser 11/12 10:39 AM chennai sally n safer $400 sdfsdgt1 4747 sjauser 11/12 10:39 AM Mazdgfdg afdagadg 789769 qwqeqe 47467 sjauser 11/12 10:39 AM hurtyry afadfadg $12000 afadsf 25426546 sjauser 11/12 10:39 AM
Assurez-vous de placer le script après le code HTML ou dans un gestionnaire d’événements prêt:
$(document).ready(function() { //Sorting code from above goes here. });