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?
var re = new RegExp(this.term, "i");
Pos hebat!ini juga berfungsi:
kombinasi jawaban @ Jörn Zaefferer dan @ Cheeso.
sumber
$().autocomplete()
Sangat membantu. Terima kasih. +1.
Berikut ini adalah versi ringan yang mengurutkan pada "String harus dimulai dengan istilah":
sumber
Ini dia, contoh lengkap fungsional:
Semoga ini membantu
sumber
jQueryUI 1.9.0 mengubah cara kerja _renderItem.
Kode di bawah ini mempertimbangkan perubahan ini dan juga menunjukkan bagaimana saya melakukan pencocokan sorotan menggunakan plugin jQuery Autocomplete dari Jörn Zaefferer. Ini akan menyoroti semua istilah individual dalam keseluruhan istilah pencarian.
Sejak pindah ke menggunakan Knockout dan jqAuto saya menemukan ini cara yang lebih mudah untuk menata hasil.
sumber
.jqAutocompleteMatch { font-weight: bold; }
this.term
regex harus digunakan sebelum melakukan pemrosesan apa pun. Lihat Escape string untuk digunakan dalam regex Javascript sebagai salah satu dari banyak jawaban untuk melakukan ini.untuk cara yang lebih mudah, coba ini:
sumber
Inilah pengulangan solusi Ted de Koning. Itu termasuk :
sumber
Ini adalah versi yang tidak memerlukan ekspresi reguler dan cocok dengan banyak hasil dalam label.
sumber
Lihatlah demo combobox, itu termasuk menyoroti hasil: http://jqueryui.com/demos/autocomplete/#combobox
Regex yang digunakan di sana juga berkaitan dengan hasil html.
sumber
Ini versi saya:
Sorot contoh teks yang cocok
sumber
Anda dapat menggunakan kode berikut:
Lib:
dan logika:
itu menciptakan widget khusus yang dapat menggantikan
_renderItem
tanpa menimpa_renderItem
prototipe plugin asli.dalam contoh saya juga menggunakan fungsi render asli untuk menyederhanakan kode
itu penting jika Anda ingin menggunakan plugin di tempat yang berbeda dengan tampilan autocomplete yang berbeda dan tidak ingin merusak kode Anda.
sumber
Jika Anda menggunakan plugin pihak ke-3, itu memiliki opsi sorot: http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions
(lihat tab Opsi)
sumber
Untuk mendukung banyak nilai, cukup tambahkan fungsi berikut:
sumber