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?