Ya, Anda bisa jika Anda melengkapi-monyet secara otomatis.
Dalam widget pelengkapan otomatis yang disertakan dalam v1.8rc3 dari jQuery UI, sembulan saran dibuat di fungsi _renderMenu dari widget pelengkapan otomatis. Fungsi ini didefinisikan seperti ini:
_renderMenu: function( ul, items ) {
var self = this;
$.each( items, function( index, item ) {
self._renderItem( ul, item );
});
},
Fungsi _renderItem didefinisikan seperti ini:
_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
Jadi yang perlu Anda lakukan adalah mengganti _renderItem fn itu dengan kreasi Anda sendiri yang menghasilkan efek yang diinginkan. Teknik ini, mendefinisikan kembali fungsi internal di perpustakaan, yang kemudian saya pelajari disebut monyet-tambalan . Begini cara saya melakukannya:
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 );
};
}
Panggil fungsi itu sekali dalam $(document).ready(...)
.
Sekarang, ini adalah retasan, karena:
ada keberatan regexp yang dibuat untuk setiap item yang diberikan dalam daftar. Keberatan regexp itu harus digunakan kembali untuk semua item.
tidak ada kelas css yang digunakan untuk memformat bagian yang selesai. Ini gaya inline.
Ini berarti jika Anda memiliki beberapa pelengkapan otomatis pada halaman yang sama, mereka semua akan mendapatkan perlakuan yang sama. Gaya css akan menyelesaikannya.
... tetapi ini menggambarkan teknik utama, dan itu berfungsi untuk kebutuhan dasar Anda.
contoh kerja yang diperbarui: http://output.jsbin.com/qixaxinuhe
Untuk mempertahankan case dari string yang cocok, sebagai ganti menggunakan case dari karakter yang diketik, gunakan baris ini:
var t = item.label.replace(re,"<span style='font-weight:bold;color:Blue;'>" +
"$&" +
"</span>");
Dengan kata lain, mulai dari kode asli di atas, Anda hanya perlu mengganti this.term
dengan "$&"
.
EDIT
Di atas mengubah setiap widget pelengkapan otomatis pada halaman. Jika Anda ingin mengubah hanya satu, lihat pertanyaan ini:
Bagaimana cara menambal * hanya satu * contoh Pelengkapan Otomatis pada halaman?