Как выделить входные слова в автозаполнении jquery ui
Не могли бы вы помочь мне выделить выделенные слова в текстовом поле с автозаполнением. Я уже заполняю слова автозаполнения, и мне нужно просто выделить только напечатанные слова. Я новичок в автозаполнении Jquery
Я получаю вывод как текст, например <Strong>Br</Strong>ijesh
//рассматривается как текст
а не как выделение только Br.
Ниже приведен фрагмент
$(document).ready(function () {
$("#studentName").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Webservice.asmx/GetStudentNames",
data: "{'prefixText':'" + request.term + "'}",
dataType: "json",
success: function (data) {
var regex = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + request.term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi");
response($.map(data.d, function (item) {
return {
label: item.split('|')[0].replace(regex, "<Strong>$1</Strong>"),
val: item.split('|')[1]
}
}))
},
failure: function (response) {
ServiceFailed(result);
}
});
},
select: function (event, ui) {
txtStudent(ui.item.val, ui.item.label); //Student name and id used in this method
},
minLength: 2
});
}); // End of ready method
Пожалуйста, помогите мне.
Ответы
Ответ 1
Мне кажется, вы должны перезаписать метод _renderItem
, чтобы иметь пользовательский рендеринг элементов. Код может быть примерно следующим:
$("#studentName").autocomplete({/* all your parameters*/})
.data("autocomplete")._renderItem = function (ul, item) {
var newText = String(item.value).replace(
new RegExp(this.term, "gi"),
"<span class='ui-state-highlight'>$&</span>");
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + newText + "</a>")
.appendTo(ul);
};
В коде я использую jQuery UI CSS "ui-state-highlight" для выделения. Вместо этого вы можете использовать <strong>
. Более того, я не включаю код, который бы избежал любых символов RegEx
, которые могут находиться внутри this.term
. Я хотел объяснить вам только основную идею. Посмотрите ответ, например, для получения дополнительной информации.
ОБНОВЛЕНО. В более поздних версиях пользовательского интерфейса jQuery вместо .data("autocomplete")
используется .data("ui-autocomplete")
. Чтобы ваш код работал в обеих (старых и новых) версиях jQuery, вы можете сделать что-то вроде следующего:
var $elem = $("#studentName").autocomplete({/* all your parameters*/}),
elemAutocomplete = $elem.data("ui-autocomplete") || $elem.data("autocomplete");
if (elemAutocomplete) {
elemAutocomplete._renderItem = function (ul, item) {
var newText = String(item.value).replace(
new RegExp(this.term, "gi"),
"<span class='ui-state-highlight'>$&</span>");
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + newText + "</a>")
.appendTo(ul);
};
}
ОБНОВЛЕНО 2. Точно так же имя "item.autocomplete"
должно быть изменено на "ui-autocomplete-item"
. См. здесь.
Ответ 2
Если вы используете новый JQueryUI, вы должны заменить это:
.data("autocomplete")._renderItem
:
.data("uiAutocomplete")._renderItem
Ответ 3
мы также можем реализовать его следующим образом.
$("#studentName").autocomplete({/* all your parameters*/});
$.ui.autocomplete.prototype._renderItem = function (ul, item) {
var t = String(item.value).replace(
new RegExp(this.term, "gi"),
"<span class='ui-state-highlight'>$&</span>");
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + t + "</a>")
.appendTo(ul);
};
Ответ 4
Для правильного отображения в jQuery UI - v1.12.1 используйте "div", а не "a"
$.ui.autocomplete.prototype._renderItem = function (ul, item) {
var t = String(item.value).replace(
new RegExp(this.term, "gi"),
"<strong>$&</strong>");
return $("<li></li>")
.data("item.autocomplete", item)
.append("<div>" + t + "</div>")
.appendTo(ul);
};
Ответ 5
$. ui.autocomplete.prototype._renderItem = function (ul, item) {
item.label = item.label.replace(новый RegExp ( "(?! [^ &;] +;) (?! < [^ < > ]) (" + $.ui.autocomplete.escapeRegex(это .term) + ") (?! [^ < > ] > ) (?! [^ &;] +;)", "gi" ), " $1" ); return $( "
" ) .data( "item.autocomplete", item) .append( "+ item.label +" ") .appendTo(мкло);
};
Используйте этот