Sim, você pode, se fizer o patch automático do macaco.
No widget de preenchimento automático incluído na v1.8rc3 da interface do usuário do jQuery, o pop-up de sugestões é criado na função _renderMenu do widget de preenchimento automático. Esta função é definida assim:
_renderMenu: function( ul, items ) {
var self = this;
$.each( items, function( index, item ) {
self._renderItem( ul, item );
});
},
A função _renderItem é definida assim:
_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
Portanto, o que você precisa fazer é substituir o _renderItem fn pela sua própria criação que produz o efeito desejado. Essa técnica, redefinindo uma função interna de uma biblioteca, aprendi a chamar -se patch de macaco . Aqui está como eu fiz isso:
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 );
};
}
Chame essa função uma vez $(document).ready(...)
.
Agora, isso é um hack, porque:
há um objeto regexp criado para cada item renderizado na lista. Esse objeto regexp deve ser reutilizado para todos os itens.
não há classe css usada para a formatação da peça concluída. É um estilo embutido.
Isso significa que, se você tivesse vários preenchimentos automáticos na mesma página, todos receberiam o mesmo tratamento. Um estilo css resolveria isso.
... mas ilustra a técnica principal e funciona para seus requisitos básicos.
exemplo de trabalho atualizado: http://output.jsbin.com/qixaxinuhe
Para preservar o caso das cadeias de correspondência, em vez de usar o caso dos caracteres digitados, use esta linha:
var t = item.label.replace(re,"<span style='font-weight:bold;color:Blue;'>" +
"$&" +
"</span>");
Em outras palavras, a partir do código original acima, basta substituir this.term
por "$&"
.
EDITAR
O texto acima altera todos os widgets de preenchimento automático na página. Se você deseja alterar apenas uma, consulte esta pergunta:
Como corrigir * apenas uma * instância do preenchimento automático em uma página?
var re = new RegExp(this.term, "i");
Ótimo post!isso também funciona:
uma combinação das respostas de @ Jörn Zaefferer e @ Cheeso.
fonte
$().autocomplete()
Super útil. Obrigado. +1.
Aqui está uma versão light que classifica "String deve começar com o termo":
fonte
Aqui está, um exemplo completo funcional:
Espero que isto ajude
fonte
O jQueryUI 1.9.0 altera como o _renderItem funciona.
O código abaixo leva essa alteração em consideração e também mostra como eu estava realizando a correspondência de destaque usando o plug-in de preenchimento automático do jQuery de Jörn Zaefferer. Ele destacará todos os termos individuais no termo geral da pesquisa.
Desde que passei a usar o Knockout e o jqAuto, achei uma maneira muito mais fácil de estilizar os resultados.
fonte
.jqAutocompleteMatch { font-weight: bold; }
this.term
regex for deve ser usada antes de qualquer processamento. Consulte String de escape para uso em regex Javascript como uma das muitas respostas sobre como fazer isso.para uma maneira ainda mais fácil, tente o seguinte:
fonte
Aqui está uma nova versão da solução de Ted de Koning. Inclui :
fonte
Aqui está uma versão que não requer expressões regulares e corresponde a vários resultados no rótulo.
fonte
Dê uma olhada na demonstração da caixa combinada, que inclui os resultados destacados: http://jqueryui.com/demos/autocomplete/#combobox
O regex em uso lá também lida com resultados html.
fonte
Aqui está a minha versão:
Destaque exemplo de texto correspondente
fonte
você pode usar o seguinte código:
lib:
e lógica:
ele cria um widget personalizado que pode substituir
_renderItem
sem substituir_renderItem
protótipo do plug-in original.no meu exemplo também usou a função de renderização original para simplificar o código
é importante se você deseja usar o plug-in em locais diferentes, com diferentes visões do preenchimento automático e não deseja quebrar seu código.
fonte
Se você usar o plug-in de terceiros, ele terá uma opção de destaque: http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions
(consulte a guia Opções)
fonte
Para suportar vários valores, basta adicionar a seguinte função:
fonte