Sortier-UI-Autocomplete-Ergebnisse basierend auf der match-Position
Möchte ich Sortiere meine jQuery-UI-Autocomplete-Ergebnisse basierend auf dem in der string-match Auftritt. Die Ergebnisse, wo das match ist der erste Buchstabe sollte priorisiert werden über die Ergebnisse in dem das Spiel ist in der Mitte der Zeichenfolge.
Einer Suche nach "M" zurückkehren sollte:
Matt, Michael, Sam, Tim, Adam, Benjamin
Statt, da es nur die Rückgabe der Gegenstände in alphabetischer Ordnung jetzt, ich bin immer diese:
Adam, Benjamin Matt, Michael, Sam, Tim
Leider, es sieht aus wie Autocomplete UI nicht alle Optionen, die für etwas wie das zu tun, sondern es präsentiert die Ergebnisse in der Reihenfolge in der er Sie empfangen hat. Mit MySql zu tun haben, die Sortierung ist keine option, da alle möglichen Spiele sind vorinstalliert, so dass ich nicht telefonieren, um die Datenbank mit jedem Tastenanschlag. Hat jemand so etwas gemacht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen beliebigen lokalen Filterung Logik, die Sie möchten, indem Sie die
source
option eine Funktion anstelle von einem einfachen array. Hier ein kurzes Beispiel, das die Grundlagen von, was Sie wollen:Beispiel: http://jsfiddle.net/zkVrs/
Grundsätzlich die Logik ist der Aufbau einer array an übereinstimmungen ein, die mit den Begriff, und dann verketten, dass mit den spielen, die den Ausdruck enthalten, aber Sie starten nicht mit ihm.
Leistung könnte hier ein problem, vor allem mit der
$.inArray
nennen. Vielleicht eine bessere Art und Weise zu erreichen, dass Teil, aber ich hoffe das wird Ihnen ein guter Ausgangspunkt.results = results.sort(function(a, b){
var posa = a.produit.toLowerCase().indexOf(request.term.toLowerCase());
var posb = b.produit.toLowerCase().indexOf(request.term.toLowerCase());
if ( posa == -1 ) posa = 1000;
if ( posb == -1 ) posb = 1000;
return posa - posb;
});
Einer möglichen Optimierung: pflücken Sie Elemente aus der Quelle-Liste, wie Sie gehen in startsWith, und dann brauchen Sie nicht, um zu testen, für die Wiederholung, beim anfügen Dinge, die den Suchstring enthalten. Aber der trade-off ist, dass das Quell-array würde müssen neu generiert werden, jedes mal, wenn der input-string geändert.
Scheint es Probleme zu haben, wenn Räume vorhanden sind, die zwischen Worten, versuchen Sie bitte Folgendes als Quelle