デモページ1( INPUT要素 type="file" ) デモページ2( ドラッグ & ドロップ ) type="file" でローカルのファイルを指定して、キャラクタセットを指定して読み込みます。ここでは、input 要素に multiple を指定していないのでファイルは一つしか指定できませんが、multiple を指定して追加の処理(cssファイルを読み込んでテーブルの見た目を調整する等)を行うのもいいでしょう。 ※ 処理は、multiple を想定して files.length ぶんループしています ※ JavaScript のコレクション処理は、$.each を使う必要があります。 input に accept="text/*" を指定できますが、csv は対象では無かったので使用していません。画像を使う場合には絶対に使用する必要があるでしょう。 ソースコード( INPUT要素 type="file" )
<!DOCTYPE html> <html> <head> <meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport"> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js"></script> <link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css"> <script src="https://lightbox.sakura.ne.jp/demo/number-format.js"></script> <script> $(function(){ $("#fire_reader").on("change", function(){ // テーブルのクリア $("#tbl").html(""); // multiple でなければループは一回だけ for( i = 0; i < this.files.length; i++ ) { // FileReader は毎回作成(同時に複数のファイルを扱えない) var reader = new FileReader(); // FileReader にデータが読み込まれた時のイベント var rows = ""; var cols = ""; var tr = null; $(reader).on("load", function () { // \r を全て削除 var data = this.result.replace(/\r/g,""); // \n で行を分ける rows = this.result.split("\n"); $.each( rows, function( idx, value ){ // 空行を無視 if ( value == "" ) { return; } cols = value.split(","); // 行を作成 tr = $("<tr></tr>").appendTo("#tbl"); $.each( cols, function( idx, value ){ // TD を追加して、テキストをセット switch( idx ) { case 7: case 8: // 数値項目はカンマ編集で右寄せ $("<td></td>").appendTo(tr) .text(value.number_format()) .css({"text-align": "right" }); break; default: $("<td></td>").appendTo(tr) .text(value); } } ) } ) }); // 上記イベントを発動するための処理( this.files[i] は blob ) if (this.files[i]) { // CSV は通常 shift_jis なので、指定します reader.readAsText(this.files[i],"shift_jis"); } } }); // ************************************** // このページ自身の QRコードの表示 // ************************************** $('#qrcode') .css({ "margin" : "20px 20px 20px 20px" }) .qrcode({width: 160,height: 160,text: location.href }); }); </script> </head> <body> <div id="head"> <input type="file" id="fire_reader" name="fire_reader"> </div> <div id="extend"> <table class="table"> <tbody id="tbl"> </tbody> </table> <div id="qrcode"></div> </div> </body> </html>
ソースコード( ドラッグ & ドロップ )
<!DOCTYPE html> <html> <head> <meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport"> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <style> * { font-size:16px; font-family: Arial, Helvetica, Verdana, "ヒラギノ角ゴPro W3", "Hiragino Kaku Gothic Pro", Osaka, "メイリオ", Meiryo, "MS Pゴシック", sans-serif; } #list { border-collapse: collapse; } #list td { padding: 5px; border: solid #000000 1px; white-space: nowrap; } #file_drop { height:30px; padding:10px; text-align: center; margin-bottom:8px; border: solid #000000 1px; } </style> </head> <body> <div id="file_drop">ここにドロップ</div> <table id="list"></table> <script> $("#file_drop").on("dragenter", function(e){ e.stopPropagation(); e.preventDefault(); $(this).css("background-color","#ddd"); console.log("dragenter"); } ); $("#file_drop").on("dragover", function(e){ e.stopPropagation(); e.preventDefault(); } ); $("#file_drop").on("dragleave", function(e){ e.stopPropagation(); e.preventDefault(); $(this).css("background-color","#fff"); } ); $("#file_drop").on("drop", function(e){ e.stopPropagation(); e.preventDefault(); $(this).css("background-color","#fff"); var files = e.originalEvent.dataTransfer.files; for( i = 0; i < files.length; i++ ) { // FileReader は毎回作成(同時に複数のファイルを扱えない) var reader = new FileReader(); // FileReader に画像が読み込まれた時のイベント var token1 = ""; var token2 = ""; var tr = null; $(reader).on("load", function () { token1 = this.result.split("\n"); $.each( token1, function( idx, value ){ // 空行を無視 if ( value == "" ) { return; } token2 = value.split(","); // 行を作成 tr = $("<tr></tr>").appendTo("#list"); $.each( token2, function( idx, value ){ // TD を追加して、テキストをセット $("<td></td>").appendTo(tr) .text(value); } ) } ) }); // 上記イベントを発動するための処理( this.files[i] は blob ) if (files[i]) { reader.readAsText(files[i],"shift_jis"); } } } ); $(document).on('dragenter', function (e) { e.stopPropagation(); e.preventDefault(); }); $(document).on('dragover', function (e) { e.stopPropagation(); e.preventDefault(); }); $(document).on('drop', function (e) { e.stopPropagation(); e.preventDefault(); }); </script> </body> </html>
関連する記事 ブラウザ上のテキストデータを名前を付けて保存できる FileSaver.js を使って、テーブルのデータを Excel で開ける事を想定した CSV にして PC に保存
|
【jQueryの最新記事】
- jQuery の $.get を使用した ajax のテンプレート
- jquery.balloon.js を使用した簡単なバルーン( マウスオーバーで表示する追加説明用 )の作り方
- jQuery による link 要素の追加と削除を bootstrap.css でリアルタイムチェック
- jQuery + bootstrap.js で ajax の GET と POST を使用した DB テーブルを更新する UI テンプレート
- jQuery : 貼り付けるだけで、ページ右下にページ先頭にジャンプするリンクを表示させる( アニメーションは無し )
- STYLE 要素を追加して、CSS テキストをセットして、jQuery で CSS に important 指定を追加する。
- ページの右下に、ページの先頭へ移動するボタンを追加する(ページの先頭から 200px までは、スクロールボタンを表示しない)
- テーブルのTDをクリックしたら、INPUT で値を変更可能にして、元の値と違うものにはフラグを立てる処理を絵で書いて説明してみました
- jQuery を使用してサーバから取得した JSON データを元にテーブルを作成し、その後から列を加工する
- JSON 配列を WEB より読み出して jQuery で動的にテーブルを作成して表示する
- jQuery UI の Datepicker Widget のオプション
- FormData を使用して、jQuery で配列として PHP に送る
- 必要なデータを隠しリストボックス( multiple ) に jQuery で追加して配列として PHP に送る
- Android Studio の追加日本語化用に、キャラクタセットに依存しないコード文字列を作成するツールを作成しました
- 画像ファイルが存在した時のみ、表示する jQuery の記述
- jQuery で mobile(スマホ) かどうかのチェックをしたくて調べたら、Stack Overflow の記事でいろんな方法が答えられていました。
- jQuery と FileReader オブジェクトによる、ローカルの複数画像ファイルのプレビュー表示
- とても面白くて簡単な jQuery のクリックしたコンテンツ以外を暗転(Blackout) するサンプル
- jQuery で、左右に並んだリストボックスの右側のデーターをダブルクリックしたら左へ転送してソートする処理
- jQuery でコンボボックスの選択されたオプションのテキストを取得する場合、optgroup を使っている場合は子孫選択でないと取得されないというお話 / find(子孫) と children(直..