HTMLでJSPを使用しています。
HTML には、テキスト ボックスと複数選択要素があります。ユーザーがテキストボックスに入力するときに、選択リストのオプションをフィルタリングしたいと思います。
このstackoveflowページで便利なJQueryコードを見つけました: How to dynamic filter options of <select > with jQuery?
コードは次のとおりです。
<script>
jQuery.fn.filterByText = function(textbox) {
return this.each(function() {
var select = this;
var options = [];
$(select).find('option').each(function() {
options.push({value: $(this).val(), text: $(this).text()});
});
$(select).data('options', options);
$(textbox).bind('change keyup', function() {
var options = $(select).empty().data('options');
var search = $.trim($(this).val());
var regex = new RegExp(search,"gi");
$.each(options, function(i) {
var option = options[i];
if(option.text.match(regex) !== null) {
$(select).append(
$('<option>').text(option.text).val(option.value)
);
}
});
});
});
};
</script>
次のように使用できます。
<script>
$(function() {
$('select').filterByText($('input'));
});
</script>
問題は、select 要素のオプションがハードコードされている場合にのみ、このコードが機能することです。ハードコーディングとは、次のような意味です。
<option value="something">something</option>
<option value="something">something</option>
ただし、私の場合、Java コードを使用して選択リストに追加する約 6000 の値のリストがあります。そのJavaコードは次のとおりです。
<%
ArrayList<String> allGenes= new ArrayList<String>();
allGenes.addAll(tree.getAllGenes());
%>
<%
for(int i=0; i<allGenes.size(); i++)
{ %>
var gene=document.createElement('option');
var str="<%=allGenes.get(i)%>";
gene.text= str;
try
{
document.getElementById("inputSet1").add(gene,null);
}
catch(ex){
document.getElementById("inputSet1").add(gene);
}
<%}%>
選択リスト内の要素をフィルタリングする JQuery コードは、Java コードを使用して追加したこれらの値をフィルタリングしません。これらの値はハードコードされていないため、代わりにそれらをすべて削除します。
これが私のテキストボックスと選択要素です:
<input type="text" name="text" id="text" style="position: absolute; top: 50px; left: 55px; width: 200px; height: 22px; right: 4px">
<select id="inputSet1" multiple="multiple" Style="position: absolute; top: 93px; left: 55px; width: 200px; height: 200px; right: 4px; overflow-y: scroll">
<option value="1">1</option> </select>
コードに追加する値をフィルター処理するのを手伝ってくれる人はいますか? ありがとうございました。