jQueryのオートコンプリートプラグインの各インスタンスのスタイルをページごとに変えたいと思います。インスタンスごとに異なるスタイルを設定する方法がわからない場合を除きます。CSSからそれらを識別するためにdiv内でac_*スタイルをラップすることができないようです。私が行うすべての変更は両方に影響します。何か案は?
ありがとうございました。
jQueryのオートコンプリートプラグインの各インスタンスのスタイルをページごとに変えたいと思います。インスタンスごとに異なるスタイルを設定する方法がわからない場合を除きます。CSSからそれらを識別するためにdiv内でac_*スタイルをラップすることができないようです。私が行うすべての変更は両方に影響します。何か案は?
ありがとうございました。
オプションを使用してappendTo
、オートコンプリートリストをの代わりにカスタムコンテナに配置しbody
ます。次に、スタイルを設定できます。例:
JS:
$('#suggestions').autocomplete({source: get_suggestions, appendTo: '#my-suggestions'})
HTML:
<input type="text" id="suggestions">
<div id="my-suggestions"></div>
CSS:
#my-suggestions {
position: absolute;
}
#my-suggestions .ui-autocomplete {
foo: bar;
}
http://api.jqueryui.com/autocomplete/#method-widget
次のようなものを追加します。
selector.autocomplete( "widget" ).addClass('yourclass');
解決策は非常に簡単です:
$( "#target-input" ).autocomplete({
open:function( event, ui ) {
$('.ui-autocomplete.ui-menu').addClass('yourClass');
},
close:function( event, ui ) {
$('.ui-autocomplete.ui-menu').removeClass('yourClass');
}
});
クラス.yourClassに任意のコードを配置できます
メソッドを書き直すことができます_renderMenu
。例としてhttp://jqueryui.com/demos/autocomplete/#comboboxを取り上げます。
selector.data("autocomplete")._renderMenu=function(ul, items){
//do something here..
}
jQuery UI 1.8を使用している場合は、ULコンテナを簡単に取得できることを発見しました。1.8でUIコンテナを取得するには、openメソッドに次を追加するだけです。
var $myAcInput = $("#my-acomplete-input");
...
$myAcInput.autocomplete({
open : function(event, ui) {
// Grab the widget that just opened:
var $resultsContainer = $formsInput.autocomplete("widget");
// Add a custom rendering class and use tht to style your subelements
$resultsContainer.addClass("my-custom-results-container-class");
// Position the container wherever you want:
$resultsContainer.position({at: "center bottom",
my:"center top",
collision: "fit",
of: "#my-acomplete-input"});
}
source : etc etc etc
});
問題は、オートコンプリートのドロップアンダーリストがプレースホルダー内に配置されていないことだと思います...例:
<div class="differentStyle">
<input type="text" class="autocomplete">
</div>
結果が戻ってくると、結果を表示するために新しいdivがページに追加されますが、「differentStyle」部門内には追加されません。DOMの最後に追加されるだけです。例えば:
<div class="differentStyle">
<input type="text" class="autocomplete">
</div>
...
<div class="ac_results">I get added by jQuery Autocomplete!</div>
</body>
ドキュメントを読むと、同じページにある2つのオートコンプリートボックスのスタイルを上書きできなくなると思います。
この投稿に出くわしたときに何か他のものを探していました...次のオートコンプリートイベントをトラップし、オートコンプリート出力を格納するアウターに自分のクラスを追加することで、これを行うことができました。次に、CSSを使用して、必要に応じて要素をフォーマットします。これが誰かに役立つことを願っています。
$input.autocomplete({
focus : function(event, ui) {
$(".forms-search-result").parents("ul").addClass("myClass");
return false;
},
open : function(event, ui) {
$(".forms-search-result").parents("ul").addClass("myClass");
},
cssの例:
.myClass a.ui-corner-all { font-weight:bold; }
また、JSON結果の一部として、実際のJSON「結果」の一部として結果が埋め込まれたHTMLシェルを(JAVA AJAXアクションから)返すだけです。そうすれば、各結果の周りに精巧なHTMLを作成し、上記の方法を使用して、希望どおりにフォーマットすることができます。
新しいバージョンでは、「appendTo」が追加され、提案リストの親要素を選択できるようになりました。リストに対して(inまたはclassを使用して)異なる親を作成できます。
この問題が発生したとき、jquery-uiはすべてのインスタンスに一意のIDを与えます。これは#ui-id-1、#ui-id-2で、domの最初のオートコンプリートは番号1、2番目の番号を取得します。 2など。したがって、オートコンプリートの順序がわかっている場合は、さまざまなスタイルをさまざまなIDに適用できます。