本ブログはヾ(。・ω・。)ノjavascriptを主題としております。
. . . 石掘る猫、過去ログを探索中
ひとつ前のjavascriptエントリーはHTAでファイル一覧を表示する、の補足ですか。
これはいけません(; ̄Д ̄)存在意義が揺らいでいます。
というわけで、今回はHTAでファイル一覧を表示するのコードをベースに改良して、
ファイル名をインクリメンタル検索するサンプルを作ってみました。
この機能はファイル数が少ないと面白くないので、WINDOWSフォルダで実行
してみました。ばっちしビットマップ画像(拡張子.bmp)が列挙されていますネ。
ソースコードはこんな感じです。
<html>
<head>
<style>
</style>
<script type="text/javascript">
var files = [];
var search = function( keyword ) {
target.innerHTML = "";
for( var i = 0; i < files.length; i++ ) {
var file = files[i];
if( file.Name.match( new RegExp( keyword, "i" ) ) ) {
target.innerHTML += ( i + 1 ) + ":" + file.Name + "<br />";
}
};
};
onload = function() {
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
var folder = fso.GetFolder( location.pathname.match( /.*\\/ )/*"C:\\Windows\\"*/ );
with( new Enumerator( folder.Files ) ) {
for( ; !atEnd(); moveNext() ) {
files.push( item() );
}
}
search( "" );
};
</script>
</head>
<body>
<input onkeyup="search(this.value);" />
<div id="target"></div>
</body>
</html>
Line.18~28は以下の2行が変更・追加となっています。
Line.24:ファイル名羅列表示から、グローバル配列filesへの挿入に
Line.26:初期状態では何も表示されないので空文字列""検索を実行
Line.8~16では検索を行っています。呼ばれるたびに愚直に全ファイルを
正規表現でマッチングし、該当要素を羅列表示しています。
Line.9:リストを空文字列""でクリアっ
Line.12:正規表現マッチング、構文違反をすると例外で落ちます><
Line.31のonkeyupではsearch機能をコールしています。キーボードが
離されたタイミング(onkeyup)をとらえているのは、状態変化のイベント
(onchange)だとフォーカスが失われるまで呼ばれずインクリメンタルに
ならないからです。便利さで言えば、どっちも一長一短ですね。
私の作るツールには、どれもインクリメンタル検索コードが入っています。
いろいろ応用できて便利ですよヾ(。・ω・。)ノ便利だよ!