JavaScriptの覚書

HTMLだけでCSVファイルをダウンロード

hrefにCSVデータを埋め込み、download属性でデフォルトファイル名を指定する。
<a id="sample2"
	href="data:application/csv;charset=utf-8,Col1%2CCol2%2CCol3%0AVal1%2CVal2%2CVal3%0AVal11%2CVal22%2CVal33%0AVal111%2CVal222%2CVal333"
	download="sample2.csv">ダウンロード2</a>
デモ

サンプル

複数ファイルダウンロード | HTML5版

デモ

HTML


	<a id="link1" href="sample/smp1.zip" download="smp1.zip">smp1.zip</a>
	<a id="link2" href="sample/smp2.zip" download="smp2.zip">smp2.zip</a>
	<a id="link3" href="sample/smp3.png" download="smp3.png">smp3.png</a>
	<a id="link4" href="sample/smp4.txt" download="smp4.txt">smp4.txt</a>
	
	<input type="button" value="複数ファイルダウンロード" onclick="test1()" class="btn btn-success btn-sm" />
	

JavaScript


	function test1(){
		$('#link1')[0].click();
		$('#link2')[0].click();
		$('#link3')[0].click();
		$('#link4')[0].click();
	}
	

BPG画像ファイルを表示する

「bpgdec8b.js」を読込むだけで良い。
あとは通常の画像表示のように、imgタグにbpg画像ファイルを指定するだけ。
ブラウザはChrome,FireFox,IE,Operaで動作確認済み。(2015年1月 時点での最新バージョン)
	<html>
	<head>
	<meta charset="UTF-8">
	<script type="text/javascript" src="bpgdec8b.js"></script>
	</head>
	<body>

		<img src="ike.bpg">
		<img src="0.bpg">

	</body>
	</html>
	
サンプル ビューアソフトはHoneyviewが対応しているとのこと。

動的にBPGを読込み、キャンバスへ書き出す場合

	<canvas id="mycanvas" width="512" height="512"></canvas>
	<script>

	//ロードイベント
	(function (){
	    var img, canvas, ctx;

	    canvas = document.getElementById("mycanvas");
	    ctx = canvas.getContext("2d");

	    img = new BPGDecoder(ctx);
	    img.onload = function() {
	        // draw the image to the canvas
	        ctx.putImageData(this.imageData, 0, 0);
	    };


	    //動的画像読込
	    img.load("ike.bpg");


	})();

	</script>
	

JSでリロード

ブラウザをリロード
location.reload(true);

falseを引数にするとキャッシュからのリロードになる。
location.reload(false);

参照サイト | HTMLクイックリファレンス

メールアドレスからドメインを採取する関数

	/**
	* メールアドレスからドメイン部分を取り出す。
	* 例)xsrhapieqd@docomo.ne.jp → docomo.ne.jp
	* 空文字やメール形式でない場合は空文字を返す。
	*/
	function extractEmailDomain(mail){

		if(mail =='' || mail==null){
			return '';
		}

		var a=mail.indexOf('@');

		if(a == -1){
			return '';
		}

		var domain=mail.substr(a + 1);

		return domain;
	}
	
サンプル

連想配列の存在確認

連想配列(オブジェクト)にキーに紐づく値が存在するかチェックする場合、以下のようにする。
以下のサンプルは空と判定。
	var test={};

	if (test['kani']){
		alert('存在する');
	}else{
		alert('空!');
	}
	

IE8で使えない関数と代替手段

IE8ではtrim()関数が使えない。
str.trim();//IE8は未対応
JQueryによる代替
str=$.trim(str);//代替手段



IE8ではindexofが使えない。
以下の処理を事前に実行しておくと、IE8でもindexofが使えるようになる。
	//ArrayクラスにindexOfメソッドがなけいれば実装
	if (!Array.indexOf) {
	    Array.prototype.indexOf = function(o) {
	        for (var i in this) {
	            if (this[i] == o) {
	                return i;
	            }
	        }
	        return -1;
	    }
	}
		
参考サイト


IE8のラジオボタンでonchangeは使っていけない
動きが非常に不安定になる。
onchangeでなくonclickを使うこと。

数値を2桁固定の文字列にする。(例 3→03)

var x = ("0"+num_a).slice(-2);
サンプル

カタカナのバリデーション

	//カタカナのバリデーション
	function katakanaVld(v) {

		var flg=false;
		if(v.match(/^[ァ-ヶー]*$/)){
			flg=true;
		}

		return flg;

	}
	
※注意
空白はtrueになる
半角カタカナはfalse
半角スペースが混じっているとfalse
サンプル

オブジェクト(連想配列)の件数を取得する

	var data_count = Object.keys(data).length;


	var data={'id':1,'name':'animal'};
	var data_count = Object.keys(data).length;
	alert(data_count);//結果→2
    

子要素を含む連想配列の場合、子要素の内部までは数えない
	var data={'id':1,'name':'animal','ary':{'a':1,'b':2}};
	var data_count = Object.keys(data).length;
	alert(data_count);//結果→3
    

jqPlotグラフのダウンロード

jpPlotのグラフを右クリックして画像ダウンロードをしても、空の画像になってしまう。
DIV要素にグラフを書き出しているのが原因と思われる。
html2canvas.jsを使ってDIV要素をCanvasデータに変換すればダウンロードできるようになる。
Canvasデータはimg要素にも出力できる。

ソースコード

	<!DOCTYPE html>
	<html lang="ja">

	<head>
		<meta charset="utf-8">

		<title>jqPlotグラフのダウンロード</title>



		<script src="../../style2/js/jquery-1.11.1.min.js"></script>
		<script type="text/javascript" src="jquery.jqplot.min.js"></script>
        <script type="text/javascript" src="FileSaver.js"></script>
		<script type="text/javascript" src="html2canvas.js"></script>

		<script>
			$( function() {

					//▽グラフ作成処理
					rec1 =[[1,null],[2,null],[3,null],[4,null],[5,null],[6,null],[7,null],[8,null],[9,null],[10,13],[11,9],[12,15],[13,14],[14,null],[15,null],[16,null],[17,null],[18,null],[19,null],[20,14],[21,10],[22,6],[23,40],[24,7],[25,7],[26,7],[27,40],[28,null],[29,null],[30,null],[31,null],];
			     	rec2 =[[1,5],[2,54],[3,12],[4,52],[5,null],[6,null],[7,null],[8,null],[9,25],[10,23],[11,19],[12,5],[13,4],[14,5],[15,null],[16,null],[17,35],[18,null],[19,null],[20,24],[21,13],[22,16],[23,30],[24,37],[25,27],[26,17],[27,14],[28,null],[29,null],[30,null],[31,8],];
					$.jqplot(
				        'graph_div',
				        [
				        	rec1,
				        	rec2
				        ],
				        {
				            series: [
				                { label: 'test' }
				            ],
				            legend: {
				                show: true,

				            },
				            axes:{
				                xaxis:{
				                    label:'日',
				                    ticks: [
				                    	'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31',

				                    ],
				                },
				                yaxis:{
				                	label:'縦軸Y',
				                    ticks: [

										'50','45','40','35','30','25','20','15','10','5','1',                    ],
				                }
				            }
				        }
			    	);





			});



			//グラフをimg要素へ表示する。
			function test_show_img(){


		        var element = $('#graph_div')[0];

		        //DOM要素をcanvasに変換する。html2canvas.jsの機能
		        html2canvas(element, { onrendered: function(canvas) {

		    	  	var imgData = canvas.toDataURL('image/png');
		            $('#img1')[0].src = imgData;

		        }});

			}


			//グラフダウンロード(シンプルコード版)
			function test_graph_download_smp(){
		        var element = $('#graph_div')[0];

		        //DOM要素をcanvasに変換してからダウンロード
		        html2canvas(element, { onrendered: function(canvas) {

		    	  	var imgData= canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");


		            window.location.href = imgData;

		    	  	//window.open(imgData, 'save');//←こちらの方法でもダウンロードできる

		        }});
			}


			//グラフダウンロード
			function test_graph_download(){

				var element = $('#graph_div')[0];

		        //DOM要素をcanvasに変換する。html2canvas.jsの機能
		        html2canvas(element, { onrendered: function(canvas) {

					//canvas.toBlob()が実装されていないブラウザに対応。
		        	var type = 'image/jpeg';
		        	// canvas から DataURL で画像を出力
		        	var dataurl = canvas.toDataURL(type);
		        	// DataURL のデータ部分を抜き出し、Base64からバイナリに変換
		        	var bin = atob(dataurl.split(',')[1]);
		        	// 空の Uint8Array ビューを作る
		        	var buffer = new Uint8Array(bin.length);
		        	// Uint8Array ビューに 1 バイトずつ値を埋める
		        	for (var i = 0; i < bin.length; i++) {
		        	  buffer[i] = bin.charCodeAt(i);
		        	}
		        	// Uint8Array ビューのバッファーを抜き出し、それを元に Blob を作る
		        	var blob = new Blob([buffer.buffer], {type: type});


		        	//★FileSaver.jsによるファイルダウンロード
			  		saveAs(
		    	  			  blob
		    	  			, "test.png"
		    	  		);

			  		/*
		    	  	canvas.toBlob(function(blob) {
		    	  		saveAs(
		    	  			  blob
		    	  			, "test.png"
		    	  		);
	    	  		});*/


		        }});
			}
		</script>
	</head>

	<body>

	<h1 >jqPlotグラフのダウンロード</h1>

	<div id="graph_div" style="height: 400px; width: 100%;"></div>
	<input type="button" value="img要素に表示" onclick="test_show_img()" />
	<input type="button" value="グラフダウンロード(シンプル版)" onclick="test_graph_download_smp()" />
	<input type="button" value="グラフダウンロード(ファイル名指定可)" onclick="test_graph_download()" />


	<hr>
	<p>img要素</p>
	<img id="img1" src=""  />
	※img要素なので右クリックによる画像ダウンロードができる。<br>

	</body>
	</html>
	

サンプル

サンプル

参考

html2canvas
GitHub:eligrey/FileSaver.js
Oboe吹きプログラマの黙示録:FileSaver.js を使ってみる
Canvas に描いた画像を png などの形式の Blob に変換する方法
グラフサンプル