Автозаполнение пользовательского интерфейса jQuery: добавление класса CSS к определенным элементам
Я использую виджет автозаполнения пользовательского интерфейса Jquery и извлекаю элементы для отображения с помощью обратного вызова, как описано в ссылке.
У меня есть сценарий использования, когда мне нужно представить некоторые элементы, которые я получаю с сервера, немного иначе, чем другие, так что пользователь понимает, что между этими элементами есть разница. В моем случае, некоторые элементы являются "личными", а некоторые "глобальными".
Я хотел бы выделить "личные" элементы, добавив к ним класс CSS, чтобы они имели немного другой фон.
Это возможно? Я видел в справочной документации, что существует аддон, который позволяет мне помещать произвольный HTML в "элементы", но я чувствую, что это неоптимально, когда все, что мне действительно нужно сделать, это добавить класс (в некоторых случаях).
Я думаю, что я бы в конечном итоге что-то вроде этого:
$("#myElement").autocomplete({
//define callback to format results
source: function(req, add){
//pass request to server
var baseUrl = '/getItems.php'
$.getJSON(baseUrl, req, function(data) {
//create array for response objects
var suggestions = [];
//process response
$.each(data, function(i, val){
var entry = new Object();
if (val.personal == true){
// add some css class somehow?
}
entry.id = val.id;
suggestions.push(entry);
});
//pass array to callback
add(suggestions);
});
},
});
2 ответа
Судя по пользовательским данным и образцу отображения, вам нужно нажать на _renderItem
метод для автозаполнения:
$("input").autocomplete({ ... }).data("autocomplete")
._renderItem = function(ul, item) {
var listItem = $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "</a>")
.appendTo(ul);
if (item.personal) {
listItem.addClass("personal");
}
return listItem;
};
Этот метод вызывается каждый раз при визуализации элемента, что позволяет выполнять проверки элемента и условно применять класс (или делать что-то более сложное).
Вот рабочий пример (без AJAX, но концепция та же самая): http://jsfiddle.net/andrewwhitaker/rMhVz/2/
Если вы используете JQuery UI 1.10 и выше, вам нужно изменить код ниже: т.е. ".data ("ui-autocomplete")"
$("input").autocomplete({ ... }).data("ui-autocomplete")
._renderItem = function(ul, item) {
var listItem = $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "</a>")
.appendTo(ul);
if (item.personal) {
listItem.addClass("personal");
}
return listItem;
};