Вы должны переопределить приватный метод _renderItem()
плагина.
Эта функция вызывается для каждого отображаемого элемента.
Первый аргумент представляет элемент <ul>
, который плагин создает для отображения меню. Второй аргумент - текущий элемент данных.
По умолчанию плагин генерирует <ul>
, поэтому в вашем переопределении _renderItem()
вы должны продолжать делать <li>
, но вы можете иметь в нем что угодно.
В вашем случае я бы вернул совершенно другой объект данных массива, он просто хранит данные, поэтому лучше разделить все:
return {
id: c.id,
label: c.label,
imgUrl: c.img,
value: c.value
}
Чтобы реализовать собственный метод рендеринга, вы просто заново определяете новую функцию для экземпляра плагина. Как это работает?
Когда вы звоните $('#myelement').autocomplete()
, плагин создает и
- Создает необходимую разметку и т. Д.
- Добавляет экземпляр плагина к элементу
#myelement
в виде данных jquery под именем «автозаполнение»
Экземпляр плагина затем можно получить, выполнив $('#myelement').data('autocomplete');
Затем вы можете определить новую функцию для метода _renderItem
Это дает:
$("#shout_field").autocomplete({
...
})
.data('autocomplete') // get the instance of the plugin
._renderItem = function( ul, item ) { // change the _renderItem method
// "item" is the current data item, so { id, label, imgUrl, value }
return $( "<li></li>" ) // generate a <li> element
// store the data item (used by the plugin)
.data( "item.autocomplete", item )
// create the display you want into the <li>
.append( '<img src="' + item.imgUrl + '" />' + '<a>' + item.label + '<br>' + item.desc + '</a>' )
// add the <li> to the list
.appendTo( ul );
};