Có, bạn có thể nếu bạn tự động hoàn thành bản vá khỉ.
Trong tiện ích tự động hoàn thành có trong v1.8rc3 của Giao diện người dùng jQuery, cửa sổ bật lên của các đề xuất được tạo trong hàm _renderMothy của tiện ích tự động hoàn tất. Hàm này được định nghĩa như thế này:
_renderMenu: function( ul, items ) {
var self = this;
$.each( items, function( index, item ) {
self._renderItem( ul, item );
});
},
Hàm _renderItem được định nghĩa như thế này:
_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
Vì vậy, những gì bạn cần làm là thay thế _renderItem fn bằng sáng tạo của riêng bạn tạo ra hiệu ứng mong muốn. Kỹ thuật này, xác định lại một chức năng nội bộ trong một thư viện, tôi đã tìm hiểu được gọi là vá khỉ . Đây là cách tôi đã làm:
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 );
};
}
Gọi chức năng đó một lần trong $(document).ready(...)
.
Bây giờ, đây là một hack, bởi vì:
có một obj regrec được tạo cho mọi mục được hiển thị trong danh sách. Điều đó regrec obj nên được sử dụng lại cho tất cả các mục.
không có lớp css nào được sử dụng để định dạng phần hoàn thành. Đó là một phong cách nội tuyến.
Điều này có nghĩa là nếu bạn có nhiều tự động hoàn thành trên cùng một trang, tất cả chúng đều được xử lý như nhau. Một phong cách css sẽ giải quyết điều đó.
... nhưng nó minh họa kỹ thuật chính, và nó hoạt động cho các yêu cầu cơ bản của bạn.
ví dụ làm việc được cập nhật: http://output.jsbin.com/qixaxinuhe
Để bảo vệ trường hợp của chuỗi khớp, trái với trường hợp sử dụng các ký tự được nhập, hãy sử dụng dòng này:
var t = item.label.replace(re,"<span style='font-weight:bold;color:Blue;'>" +
"$&" +
"</span>");
Nói cách khác, bắt đầu từ mã gốc ở trên, bạn chỉ cần thay thế this.term
bằng "$&"
.
EDIT
Trên đây thay đổi mọi tiện ích tự động hoàn thành trên trang. Nếu bạn chỉ muốn thay đổi một, hãy xem câu hỏi này:
Cách vá * chỉ một * bản sao của Tự động hoàn tất trên một trang?