Да, вы можете, если у вас есть автозаполнение.
В виджете автозаполнения, включенном в v1.8rc3 пользовательского интерфейса jQuery, всплывающее окно с подсказками создается в функции _renderMenu виджета автозаполнения. Эта функция определяется следующим образом:
_renderMenu: function( ul, items ) {
var self = this;
$.each( items, function( index, item ) {
self._renderItem( ul, item );
});
},
Функция _renderItem определяется следующим образом:
_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
Так что вам нужно заменить это _renderItem fn своим собственным созданием, которое производит желаемый эффект. Этот метод, переопределяющий внутреннюю функцию в библиотеке, я пришел к изучению, называется патч-аппликация . Вот как я это сделал:
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 );
};
}
Вызовите эту функцию один раз в $(document).ready(...)
.
Это хак, потому что:
Для каждого элемента, представленного в списке, создается регулярное выражение obj. Это регулярное выражение obj должно быть повторно использовано для всех элементов.
нет класса css, используемого для форматирования законченной части. Это встроенный стиль.
Это означает, что если бы у вас было несколько автозаполнений на одной странице, они все получили бы одинаковое обращение. Стиль CSS поможет решить эту проблему.
... но он иллюстрирует основную технику и работает для ваших основных требований.
обновленный рабочий пример: http://output.jsbin.com/qixaxinuhe
Чтобы сохранить регистр строк совпадения, в отличие от использования регистра напечатанных символов, используйте эту строку:
var t = item.label.replace(re,"<span style='font-weight:bold;color:Blue;'>" +
"$&" +
"</span>");
Другими словами, начиная с исходного кода выше, вам просто нужно заменить this.term
на "$&"
.
РЕДАКТИРОВАТЬ
Вышеуказанное изменяет каждый виджет автозаполнения на странице. Если вы хотите изменить только один, посмотрите на этот вопрос:
Как установить * только один * экземпляр автозаполнения на странице?
var re = new RegExp(this.term, "i");
Отличный пост!это также работает:
сочетание ответов @ Jörn Zaefferer и @ Cheeso.
источник
$().autocomplete()
Супер полезно. Спасибо. +1.
Вот облегченная версия, которая сортирует слова «строка должна начинаться с термина»:
источник
Вот он, функциональный полный пример:
Надеюсь это поможет
источник
jQueryUI 1.9.0 меняет работу _renderItem.
Приведенный ниже код учитывает это изменение, а также показывает, как я выполнял сопоставление выделенных фрагментов с помощью плагина JQuery Autocomplete от Jörn Zaefferer. Он выделит все отдельные термины в общем поисковом запросе.
С тех пор как я перешел на использование Knockout и jqAuto, я обнаружил, что это гораздо более простой способ стилизации результатов.
источник
.jqAutocompleteMatch { font-weight: bold; }
this.term
регулярного выражения должна использоваться перед любой обработкой. См. Escape-строку для использования в регулярных выражениях Javascript как один из многих ответов на вопрос, как это сделать.для еще более простого способа попробуйте это:
источник
Вот перефразировка решения Теда де Конинга. Оно включает :
источник
Вот версия, которая не требует регулярных выражений и соответствует нескольким результатам в метке.
источник
Взгляните на демонстрацию combobox, она включает в себя выделение результатов: http://jqueryui.com/demos/autocomplete/#combobox
Используемое здесь регулярное выражение также имеет дело с результатами html.
источник
Вот моя версия:
Пример выделенного текста
источник
Вы можете использовать следующий код:
Lib:
и логика:
он создает собственный виджет, который может переопределять
_renderItem
без перезаписи_renderItem
исходного прототипа плагина.в моем примере также используется оригинальная функция рендеринга для упрощения кода
это важно, если вы хотите использовать плагин в разных местах с разным представлением автозаполнения и не хотите ломать свой код.
источник
Если вместо этого вы используете сторонний плагин, у него есть опция выделения: http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions
(см. вкладку «Параметры»)
источник
Чтобы поддерживать несколько значений, просто добавьте следующую функцию:
источник