<select>
このコードを使用してメニューをフィルタリングします。
jQuery.fn.filterByText = function(textbox) {
return this.each(function() {
var select = this;
var options = [];
$(select).find('option').not('option:first-child').each(function() {
options.push({value: $(this).val(), text: $(this).text(), rel: $(this).attr('rel')});
});
$(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)
);
}
});
});
});
};
ご覧のとおり、私は最初のタグ.not('option:first-child')
を除外するために使用します。<option>
このコードには2つの問題があり、正常に機能しますが、フィルタリングに属性を含める必要があり、テキストボックスをクリアしたときにrel
を再度追加したいと思います。option:first-child
を配列に追加rel: $(this).attr('rel')
しoptions
ましたが、フィルタリングされた結果に戻す方法がわかりませんか?
元の値をすべて作成してそこvar original = [];
にプッシュできますか?