私はこのプラグインを参照しています: http://jqueryui.com/demos/autocomplete/
結果の元の構造は
<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all">
<li class="ui-menu-item">
<a class="ui-corner-all">item 1</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 2</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 3</a>
</li>
</ul>
次のようなリンクを作成する必要があります。
<a class="myclass" customattribute="something"> The item </a>
サイト上のすべてのオートコンプリートに同じ形式を使用したくないので、プラグインを編集するための唯一の解決策を教えないでください。
_renderItem
メソッドを置き換える必要があります(問題のオートコンプリートの場合):
$("selector").autocomplete({ ... })
.data( "autocomplete" )._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a class='myclass' customattribute='" + item.customattribute + "'>" + item.label + "</a>" )
.appendTo( ul );
};
(items
のsource
にcustomattribute
というプロパティがあると仮定します)
この例に示すように、 http://jqueryui.com/demos/autocomplete/#custom-data
これは、jquery-uiオートコンプリートドキュメント Jquery-autocomplete にも記載されています。
トリックは:
次に、オートコンプリートオプションパスで
html:true
...autocomplete({
...
html:true
...
}
);
これで、HTML(<div> sample </ div>など)をJSON出力の「label」フィールドに渡してオートコンプリートすることができます。
プラグインをJQueryに追加する方法がわからない場合:
投稿日:2013年7月28日
イベント「open」で属性を追加してみることができます。
$( ".selector" ).autocomplete({
open: function(event, ui) {
var jArrEl = $("a.ui-corner-all");
jArrEl.addClass("myclass");
jArrEl.attr("customattribute","something");
}
});
新しいバージョンのオートコンプリートにはcreate
イベントを使用できます。このような:
create: function () {
$(this).data('ui-autocomplete')._renderItem = function (ul, item) {
var path = 'basepath' + item.value;
return $('<li class="divSelection">')
.append('<div>')
.append('<img class="zoom" src="' + path + '" />')
.append('<span>')
.append(item.label)
.append('</span>')
.append('</div>')
.append('</li>')
.appendTo(ul); // customize your HTML
};
}
完全なコードレビューのために、オートコンプリートをバインドする方法をテキストボックスに添付しています。
$('.myTextBox').autocomplete({
source: function (request, response) {
// your call to the server
},
select: function (event, ui) {
// when item is selected
$(this).val(ui.item.label);
},
create: function () {
$(this).data('ui-autocomplete')._renderItem = function (ul, item) {
var path = 'basepath' + item.value;
return $('<li class="divSelection">')
.append('<div>')
.append('<img class="zoom" src="' + path + '" />')
.append('<span>')
.append(item.label)
.append('</span>')
.append('</div>')
.append('</li>')
.appendTo(ul); // customize your HTML
};
}
});