バックグラウンド
HTML要素用のjQueryベースのシャトルウィジェットを開発しました。これは、最小限に体系化され、発音区別符号select
を補正する正規表現フィルターを提供するウィジェットが見つからなかったためです。
問題
に数千のエントリが追加されるselect
と、正規表現フィルターの速度が低下します。次のように問題を確認できます。
- 参照先:http://jsfiddle.net/U8Xre/2/
- 結果パネルの入力フィールドをクリックします。
- 正規表現を入力します(例:)
^a.*ai
。
コード
私は犯人がここに潜んでいると信じています:
var options = $src.empty().scrollTop( 0 ).data( "options" );
var search = $.trim( $input.val() );
var regex = new RegExp( search, 'gi' );
var len = options.length;
var $html = $(document.createElement( 'option' ));
for( var i = 0; i < len; i++ ) {
var o = options[ i ];
if( o.text.dediacritics().match( regex ) !== null ) {
$src.append( $html.clone().text( o.text ).val( o.value ) );
}
}
$src.css( 'width', $input.width() + 4 );
$src
ソースはどこ$('#select')
にありString.prototype.dediacritics
、フィドルのように定義されています。上記のコードは、キーを押すたびに実行されます。もう1つの関連するスニペットがあります:
// Create a copy of the source options to use when matching the regex.
var $options = [];
$src.find( "option" ).each( function() {
$options.push( { value: $(this).val(), text: $(this).text() } );
});
$src.data( "options", $options );
これにより、ソースリストからオプションのコピーが作成されますが、実行されるのは1回だけです。(これにより、オプションをシャトルするときに重複のバグが発生しますが、上記のコードをinput
イベントハンドラーに追加すると、フィルターの速度がさらに低下します。)
質問
最大5,000語のリストに対してほぼリアルタイムで正規表現フィルタリングを実行するようにコードを作成するにはどうすればよいですか?
ありがとうございました!