Oui, vous pouvez si vous effectuez une saisie semi-automatique de monkey-patch.
Dans le widget de saisie semi-automatique inclus dans la v1.8rc3 de jQuery UI, la fenêtre contextuelle de suggestions est créée dans la fonction _renderMenu du widget de saisie semi-automatique. Cette fonction est définie comme ceci:
_renderMenu: function( ul, items ) {
var self = this;
$.each( items, function( index, item ) {
self._renderItem( ul, item );
});
},
La fonction _renderItem est définie comme ceci:
_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
Donc, ce que vous devez faire est de remplacer ce _renderItem fn par votre propre création qui produit l'effet souhaité. Cette technique, redéfinissant une fonction interne dans une bibliothèque, que j'apprends, s'appelle le monkey-patching . Voici comment je l'ai fait:
function monkeyPatchAutocomplete() {
// don't really need this, but in case I did, I could store it and chain
var oldFn = $.ui.autocomplete.prototype._renderItem;
$.ui.autocomplete.prototype._renderItem = function( ul, item) {
var re = new RegExp("^" + this.term) ;
var t = item.label.replace(re,"<span style='font-weight:bold;color:Blue;'>" +
this.term +
"</span>");
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + t + "</a>" )
.appendTo( ul );
};
}
Appelez cette fonction une fois $(document).ready(...)
.
Maintenant, c'est un hack, car:
il y a un obj regexp créé pour chaque élément rendu dans la liste. Cet obj d'expression régulière doit être réutilisé pour tous les éléments.
il n'y a pas de classe css utilisée pour le formatage de la pièce terminée. C'est un style en ligne.
Cela signifie que si vous aviez plusieurs saisie semi-automatique sur la même page, ils recevraient tous le même traitement. Un style css résoudrait cela.
... mais cela illustre la technique principale, et cela fonctionne pour vos besoins de base.
exemple de travail mis à jour: http://output.jsbin.com/qixaxinuhe
Pour conserver la casse des chaînes de correspondance, par opposition à l'utilisation de la casse des caractères tapés, utilisez cette ligne:
var t = item.label.replace(re,"<span style='font-weight:bold;color:Blue;'>" +
"$&" +
"</span>");
En d'autres termes, à partir du code d'origine ci-dessus, il vous suffit de remplacer this.term
par "$&"
.
MODIFIER
Ce qui précède modifie chaque widget de saisie semi-automatique de la page. Si vous ne souhaitez en modifier qu'une seule, consultez cette question:
Comment corriger * une seule * instance de saisie semi-automatique sur une page?
var re = new RegExp(this.term, "i");
Super article!cela fonctionne également:
une combinaison des réponses de @ Jörn Zaefferer et @ Cheeso.
la source
$().autocomplete()
Super utile. Je vous remercie. +1.
Voici une version allégée qui trie sur "La chaîne doit commencer par le terme":
la source
Voilà, un exemple complet fonctionnel:
J'espère que cela t'aides
la source
jQueryUI 1.9.0 modifie le fonctionnement de _renderItem.
Le code ci-dessous prend en compte ce changement et montre également comment je faisais la mise en correspondance des tons clairs en utilisant le plugin jQuery Autocomplete de Jörn Zaefferer. Il mettra en évidence tous les termes individuels dans le terme de recherche global.
Depuis que je suis passé à l'utilisation de Knockout et de jqAuto, j'ai trouvé que c'était un moyen beaucoup plus simple de styliser les résultats.
la source
.jqAutocompleteMatch { font-weight: bold; }
this.term
expression rationnelle for doit être utilisée avant d'effectuer tout traitement. Voir Chaîne d'échappement à utiliser dans Javascript regex comme l'une des nombreuses réponses à la façon de procéder.pour un moyen encore plus simple, essayez ceci:
la source
Voici une répétition de la solution de Ted de Koning. Il comprend :
la source
Voici une version qui ne nécessite aucune expression régulière et qui correspond à plusieurs résultats dans l'étiquette.
la source
Jetez un œil à la démo combobox, elle inclut la mise en évidence des résultats: http://jqueryui.com/demos/autocomplete/#combobox
Le regex utilisé ici traite également des résultats html.
la source
Voici ma version:
Mettre en évidence un exemple de texte correspondant
la source
vous pouvez utiliser le code suivant:
lib:
et logique:
il crée un widget personnalisé qui peut remplacer
_renderItem
sans écraser le_renderItem
prototype de plugin original.dans mon exemple, j'ai également utilisé la fonction de rendu d'origine pour simplifier le code
c'est une chose importante si vous souhaitez utiliser le plugin à différents endroits avec une vue différente de la saisie semi-automatique et que vous ne voulez pas casser votre code.
la source
Si vous utilisez à la place le plugin tiers, il a une option de surbrillance: http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions
(voir l'onglet Options)
la source
Pour prendre en charge plusieurs valeurs, ajoutez simplement la fonction suivante:
la source