event ejemplo jquery-ui jquery jquery-autocomplete

jquery-ui - ejemplo - jquery autocomplete select event



Cómo resaltar palabras de entrada en autocompletar jQueri ui (5)

¿Podría ayudarme, por favor, a resaltar las palabras escritas en el cuadro de texto de autocompletar? Ya estoy completando las palabras de autocompletar y solo tengo que resaltar las palabras escritas solo. Soy nuevo en Jquery Autocompletar

<Strong>Br</Strong>ijesh la salida como texto como <Strong>Br</Strong>ijesh // visto como texto
Y no como destacando el Br solo.

A continuación se muestra el fragmento

$(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

Por favor, ayúdame.


Me parece que debería sobrescribir el método _renderItem para tener una representación personalizada de los elementos. El código podría ser sobre lo siguiente:

$("#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("<div>" + newText + "</div>") .appendTo(ul); };

En el código utilizo jQuery UI CSS "ui-state-highlight" para resaltar. Puedes usar <strong> lugar. Además, no this.term el código que escaparía a ningún carácter RegEx que pudiera estar dentro de este this.term . Quería explicarte solo la idea principal. Mira la respuesta, por ejemplo, para obtener información adicional.

ACTUALIZADO : las versiones más recientes de jQuery UI utilizan .data("ui-autocomplete") lugar de .data("autocomplete") . Para hacer que su código funcione en las versiones (antiguas y nuevas) de jQuery, puede hacer algo como lo siguiente:

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("<div>" + newText + "</div>") .appendTo(ul); }; }

ACTUALIZADO 2 : De la misma manera, el nombre "item.autocomplete" debe cambiarse a "ui-autocomplete-item" . Ver here


Para una representación correcta en jQuery UI - v1.12.1 use "div", no "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); };


Si está utilizando un nuevo JQueryUI, debe reemplazar esto:

.data("autocomplete")._renderItem

a esto:

.data("uiAutocomplete")._renderItem


También podemos implementarlo así.

$("#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); };


$.ui.autocomplete.prototype._renderItem = function (ul, item) { item.label = item.label.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(this.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); return $("<li></li>") .data("item.autocomplete", item) .append("<a>" + item.label + "</a>") .appendTo(ul); };

Utilizar esta