2017-05-11 6 views
0

Ich benutze list.js, um die Daten meiner Tabelle einfach zu sortieren. Sortierfunktion funktioniert gut, aber ich möchte das ursprüngliche Verhalten ändern. Wenn ein Benutzer die Tabelle zum ersten Mal sieht, sollte er Datensätze mit einem bestimmten Wert in einer Spalte (in diesem Beispiel mit meiner lokalen Währung) an den Anfang legen. Zunächst sollte die spätere Sortierung normal funktionieren.Wie schreibe ich die Sortierfunktion für List.js?

Lassen Sie uns den Code sehen:

<table id="accountsList"> 
<thead> 
    <tr> 
     <th scope="col" class="sort" data-sort="currency-td" aria-role="button"><span>Currency</span></th> 
     <th scope="col" class="sort" data-sort="accountNo-td" aria-role="button"><span>Account number</span></th> 
     <th scope="col" class="sort td-centered" data-sort="used-td" aria-role="button"><span>Used</span></th> 
    </tr> 
</thead> 
<tbody class="list"> 
    <tr> 
     <td class="currency-td">EUR</td> 
     <td class="accountNo-td">53106010151036926643566665</td> 
     <td class="used-td td-centered"> 
      <input type="checkbox" checked> 
     </td> 
    </tr> 
    <tr> 
     <td class="currency-td">PLN</td> 
     <td class="accountNo-td">83106010151036926643522665</td> 
     <td class="used-td td-centered"> 
      <input type="checkbox"> 
     </td> 
    </tr> 
    <tr> 
     <td class="currency-td">PLN</td> 
     <td class="accountNo-td">59996010151036926643566665</td> 
     <td class="used-td td-centered"> 
      <input type="checkbox" checked> 
     </td> 
    </tr> 
    <tr> 
     <td class="currency-td">USD</td> 
     <td class="accountNo-td">33106010151036999643566675</td> 
     <td class="used-td td-centered"> 
      <input type="checkbox"> 
     </td> 
    </tr> 
</tbody> 

<script type="application/javascript"> 
$(document).ready(function(){ 
var options = { 
    valueNames: ['currency-td', 'accountNo-td', 'used-td'] 
}; 

var accountsList = new List('accountsList', options); 

accountsList.sort("currency-td", { 
    order: "desc" 
}); 
}); 
</script> 

Das einzige, was ich tun möchte ist, alle Datensätze mit der Währung zu Beginn an der Spitze ‚PLN‘ setzen . Warum ordne ich sie nicht einfach so, wie ich es möchte, in HTML so, wie ich es möchte, und erlaube später das Sortieren ohne vorherige Sortierung? Weil diese Datensätze tatsächlich von PHP generiert werden (ich habe den Code oben vereinfacht und nur ein Beispiel für generiertes HTML gezeigt), und ich kann nicht vorhersagen, welche Daten ich bekommen werde.

Ich brauche eine Sortierfunktion an dieser Stelle schreiben:

accountsList.sort("currency-td", { 
    order: "desc", 
    sortFunction: function() {} 
}); 

Sie irgendwelche Ideen haben Sie? :)

Antwort

1

Versuchen Sie es mit Alphabet Merkmal List.js, smthg wie:

var options = { 
    valueNames: ['currency-td', 'accountNo-td', 'used-td'] 
}; 

var accountsList = new List('accountsList', options); 

accountsList.sort("currency-td", { alphabet: "PLNABCDEFGHIJKMOQRSTUVXYZplnabcdefghijkmoqrstuvxyz" } 
); 

Dies wird hier dokumentiert http://listjs.com/api/#sort

+0

Ich denke, es würde in der Tat die "PLN" Aufzeichnungen zuerst, aber ich fürchte, es hat auch Nebenwirkungen. Zum Beispiel würde "NGN" in diesem Fall vor "JPY" gehen. Ich brauche nur die Ausnahme 'PLN'. – Hub26

+0

ja in der Tat ...! – butterFlyNick

0

ich es dachte, auf diese Weise aus:

accountsList.sort('currencyTd', { 
     order: 'asc', 
     sortFunction: function (a, b) { 
      if ((a.currencyTd === 'PLN') != (b.currencyTd === 'PLN')) { 
       return a.currencyTd === 'PLN' ? 1 : -1; 
      } 
      return a.currencyTd > b.currencyTd ? 1 : 
        a.currencyTd < b.currencyTd ? -1 : 0; 
     } 
    }); 

Die vorgeschlagene Lösung lautet: https://stackoverflow.com/a/17254561/5420497

Verwandte Themen