2011-01-02 5 views
3

J'ai un tableau des noms et des âges que je veux que l'utilisateur puisse trier. Lorsque la page se charge initally, sortList répertorie les lignes dans l'ordre du plus vieux au plus jeune, puis secondairement de A à Z.jQuery/Tablesorter: maintenir le tri alphabétique secondaire

Je veux la même chose (un tri secondaire alphabétique) lorsque l'utilisateur clique sur l'âge <th>, mais sortForce rend le tri alphabétique primaire. Y a-t-il une alternative?

$('#super_results table').tablesorter({ 
    sortForce: [[0,0]], 
    sortList: [[1,1],[0,0]] 
}); 

Ou est-ce que je ne comprends pas sortForce? Documentation here.

Mise à jour: je ne pouvais pas trouver un plugin pour le faire pour moi, donc j'écrit un code qui trie le tableau multidimensionnel qui construit la table. Si vous avez un tableau appelé tableContents, et tableContents[0] est un sous-ensemble de noms et tableContents[1] est un sous-groupe d'âges, puis appelant tableContents.sort(numSort) va trier le tableau d'abord du plus ancien au plus jeune, puis de A à Z. (num2Sort trie le plus jeune au plus ancien en premier .) Ensuite, vous pouvez recréer la table en utilisant createHtml(data), et utiliser le résultat pour remplacer l'ancienne table.

function numSort(a, b) { 
    if (a[1] === b[1]) { 
     if (a[0] === b[0]) { 
      return 0; 
     } 
     return (a[0] < b[0]) ? -1 : 1; 
    } 
    return (a[1] < b[1]) ? 1 : -1; 
} 

function num2Sort(a, b) { 
    if (a[1] === b[1]) { 
     if (a[0] === b[0]) { 
      return 0; 
     } 
     return (a[0] < b[0]) ? -1 : 1; 
    } 
    return (a[1] < b[1]) ? -1 : 1; 
} 

function createHtml(data) { 
    var completeListLength = MYAPP.completeList.length, 
    html = '<table>'; 
    html += '<thead>'; 
    html += '<tr>'; 
    html += '<th>names</th>'; 
    html += '<th>ages</th>'; 
    html += '</tr>'; 
    html += '</thead>'; 
    html += '<tbody>'; 
    for (var i = 0; i < completeListLength; i += 1) { 
     html += '<tr>'; 
     html += '<td>' + data[i][0] + '</td>'; 
     html += '<td>' + data[i][1] + '</td>'; 
     html += '</tr>'; 
    } 
    html += '</tbody>'; 
    html += '</table>'; 
    return html; 
} 
+0

cela fonctionne quand vous supprimez sortForce? – typeof

+0

Lorsque j'enlève sortForce et clique sur les âges, la table trie les âges mais il n'y a pas d'alphabétisation. – user460847

+0

Je n'ai pas le plugin a la capacité de faire ce que vous demandez .. – ifaour

Répondre

0

Je ne suis pas familier avec tablesorter, mais en regardant la documentation, il semble que les serrures de propriété sortForce dans une colonne à un ordre spécifique - ce qui permet ensuite de tri d'autres colonnes secondairement. Je ne pense pas que ce soit exactement ce que tu veux.

0

Le lien dans la première réponse est brisée. Voici un lien vers l'archive web de cette page.

jQuery tablesorter secondary sorting problem

j'avais légèrement modifié ce code pour travailler dans v.2.22.3 (peut-être va travailler dans d'autres versions)

Couper ces lignes de code du tablesorter:

if (c.sortForce !== null) { 
    arry = c.sortForce; 
    for (col = 0; col < arry.length; col++) { 
     if (arry[col][0] !== indx) { 
      c.sortList.push(arry[col]); 
     } 
    } 
} 

Et collez-le après c.sortList.push([ indx, order ]); - quelques lignes en dessous de l'endroit avec le code précédent. Tablesorter v.2.0 avait d'autres noms pour les variables (pour c => config, indx => i, etc.) mais vous pouvez trouver le bon endroit à chercher sortForce - il a plusieurs apparences dans le code de Tablesorter