Sí, puedes hacerlo si parches de mono se autocompletan.
En el widget de autocompletar incluido en v1.8rc3 de jQuery UI, la ventana emergente de sugerencias se crea en la función _renderMenu del widget de autocompletar. Esta función se define así:
_renderMenu: function( ul, items ) {
var self = this;
$.each( items, function( index, item ) {
self._renderItem( ul, item );
});
},
La función _renderItem se define así:
_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
Entonces, lo que debe hacer es reemplazar ese _renderItem fn con su propia creación que produzca el efecto deseado. Esta técnica, redefiniendo una función interna en una biblioteca, he llegado a aprender que se llama parche de mono . Así es como lo hice:
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 );
};
}
Llama a esa función una vez $(document).ready(...)
.
Ahora, esto es un truco, porque:
Hay un obj regexp creado para cada elemento presentado en la lista. Ese regexp obj debe reutilizarse para todos los artículos.
no se utiliza ninguna clase css para formatear la parte completada. Es un estilo en línea.
Esto significa que si tuviera múltiples autocompletados en la misma página, todos recibirían el mismo tratamiento. Un estilo CSS resolvería eso.
... pero ilustra la técnica principal y funciona para sus requisitos básicos.
ejemplo de trabajo actualizado: http://output.jsbin.com/qixaxinuhe
Para preservar el caso de las cadenas de coincidencia, en lugar de usar el caso de los caracteres escritos, use esta línea:
var t = item.label.replace(re,"<span style='font-weight:bold;color:Blue;'>" +
"$&" +
"</span>");
En otras palabras, a partir del código original anterior, solo necesita reemplazarlo this.term
por "$&"
.
EDITAR
Lo anterior cambia cada widget de autocompletar en la página. Si desea cambiar solo uno, consulte esta pregunta:
¿Cómo parchear * solo una * instancia de Autocompletar en una página?