Sì, è possibile se si completa automaticamente la patch di scimmia.
Nel widget di completamento automatico incluso in v1.8rc3 dell'interfaccia utente di jQuery, il popup di suggerimenti viene creato nella funzione _renderMenu del widget di completamento automatico. Questa funzione è definita in questo modo:
_renderMenu: function( ul, items ) {
var self = this;
$.each( items, function( index, item ) {
self._renderItem( ul, item );
});
},
La funzione _renderItem è definita in questo modo:
_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
Quindi quello che devi fare è sostituire quel _renderItem fn con la tua creazione che produce l'effetto desiderato. Questa tecnica, che ridefinisce una funzione interna in una libreria, che ho imparato a conoscere, si chiama patch-monkey . Ecco come l'ho fatto:
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 );
};
}
Chiama quella funzione una volta dentro $(document).ready(...)
.
Ora, questo è un trucco, perché:
c'è un oggetto regexp creato per ogni elemento visualizzato nell'elenco. Quel regexp obj dovrebbe essere riutilizzato per tutti gli oggetti.
non esiste una classe CSS utilizzata per la formattazione della parte completata. È uno stile in linea.
Ciò significa che se avessi più completamenti automatici nella stessa pagina, otterrebbero tutti lo stesso trattamento. Uno stile CSS risolverebbe questo.
... ma illustra la tecnica principale e funziona per i tuoi requisiti di base.
esempio di lavoro aggiornato: http://output.jsbin.com/qixaxinuhe
Per preservare il caso delle stringhe di corrispondenza, anziché utilizzare il caso dei caratteri digitati, utilizzare questa riga:
var t = item.label.replace(re,"<span style='font-weight:bold;color:Blue;'>" +
"$&" +
"</span>");
In altre parole, a partire dal codice originale sopra, devi solo sostituirlo this.term
con "$&"
.
MODIFICA
Quanto sopra cambia ogni widget di completamento automatico sulla pagina. Se vuoi cambiarne solo una, vedi questa domanda:
Come patchare * solo * un'istanza di Completamento automatico su una pagina?