JavaScriptの覚書

JSONからHTMLテーブルを生成する | JsonToTable.js

JsonToTable.jsライブラリを利用して、JSONからHTMLテーブルを生成する。
下記からをJsonToTable.jsをダウンロードする。
Download JsonToTable.js

使い方サンプル

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

		<head>
			<meta charset="utf-8">
			<meta http-equiv="X-UA-Compatible" content="IE=edge">
			<meta name="viewport" content="width=device-width, initial-scale=1">
			<title>サンプル | JSONからHTMLテーブルを生成する</title>

			<script src="../../style2/js/jquery-1.11.1.min.js"></script>
			<script src="JsonToTable.js"></script>

			<script>
				function test1(){

					//JSON文字列を取得
					var str_json=$("#json1").html();

					//列オプションの設定
					var clmOptions={
						'name1':{'name':'名前1'},
						'dummy':{'visible':false},
						'name2':{'name':'名前2','sanitaize':true},
						'value1':{'name':'値1','mapping':{0:'ネコ',1:'ネズミ',2:'ウシ',3:'トラ'}},
						'value2':{'name':'金額(円)','currency':'jpy'},
						'value3':{'name':'容量','byte_size':true},
					};

					//テーブル要素の属性オプション
					var attributes={'id':'tbl1', 'border':1, };
					
					var jsonToTable=new JsonToTable();// JSONからHTMLテーブル生成
					jsonToTable.create('#res1',str_json,clmOptions,attributes);
					
				}
			</script>
		</head>

		<body>

			<h2>サンプル | JSONからHTMLテーブルを生成する</h2>

			<strong>JSON文字列</strong>(テーブルのデータ)
			<div id="json1">
			[{"id":"1","name1":"テストA1","name2":"テストB1","dummy":"ダミー1","value1":"1","value2":"","value3":"","value4":"","date1":"2012/12/12","datetime1":"2012/12/12 12:12:12"},
			{"id":"2","name1":"\u003Cspan style='color:red'\u003Eテスト\u003C/span\u003EA2","name2":"\u003Cspan style='color:red'\u003Eテスト\u003C/span\u003EB2","dummy":"ダミー2","value1":"2","value2":"1000","value3":"123456789","value4":"0","date1":"2012/12/13","datetime1":"2012/12/12 12:12:12"},
			{"id":"3","name1":"テストA3","name2":"テストB3","dummy":"ダミー3","value1":"3","value2":"10,000.12","value3":"123456","value4":"1","date1":"dummy","datetime1":"dummy"},
			{"id":"4","name1":"テストA4","name2":"テストB4","dummy":"ダミー4","value1":"4","value2":"1000000","value3":"99000000000","value4":"2","date1":"2012/12/15","datetime1":"2012/12/12 12:12:12"}]
			</div>

			<hr>
			<input type="button" value="テーブル作成" onclick="test1()" class="btn btn-success" />

			<div id="res1" ></div>


		</body>
	</html>
	



主要なメソッド
jsonToTable.create(要素名,JSON文字列,列オプション,属性オプション);

createメソッドの引数説明
引数名称説明
table_selector 要素名 HTMLテーブルの出力場所をセレクタ名で指定する。
例:"#sample_tbl"
str_json JSON文字列 テーブルのデータ元であるJSON文字列を指定する。
clmOptions 列オプション 列に関する細かなオプションを設定する。
詳しくは下記の「列オプションの設定」に記載。
attributes テーブル要素の属性オプション 生成テーブルタグの属性を指定する。
例 attributesの値→ {'id':'test1', 'class':'style_a', };
↓生成↓
テーブルタグ → <table id="test1" class="style_a" >

列オプションの設定
プロパティ説明
name 列名を指定する。
省略するとキーが表示される。
例→'名前1'
sanitaize trueにするとXSSサニタイズする。
次の4つの記号「< > " '」をサニタイズする。
省略時はfalse扱い。
mapping 値に紐づく文字を表示する。
以下のように設定する。
{0:'ネコ',1:'ネズミ',2:'ウシ',3:'トラ'}
値が2である場合、表では「ウシ」と表示される。
currency jpyを指定すると3桁区切りの金額表記になる。
1234→¥1,234
現在は日本円のみ対応
byte_size バイト容量の表示
数値の大きさによって、次の単位「byte,KB,MB,GB」が自動的に切り替わる。
checkbox チェックボックスで表示する。
値には属性オブジェクトを指定する。

設定値→'checkbox':{'name':'xxx_name','class':'xxx2'}
HTML→<input type='checkbox' name='xxx_name' class='xxx2' />


サンプル1
サンプル2(シンプル番)

日付チェック | isDate()

	/**
	 * 日付チェック
	 * 
	 * @note
	 * yyyy/mm/dd形式とyyyy-mm-dd形式に対応
	 * 閏年に対応
	 * 空値ならfalseを返す。
	 * 
	 * @param value
	 * @returns true:入力OK    false:入力エラー
	 */
	_isDate(value){

		var ary=value.split("/");
		if(ary.length != 3){
			ary=value.split("-");
			if(ary.length != 3){
				return false;;
			}
		}
		
		let y = ary[0];
		let m = ary[1];
		let d = ary[2];

		let regexp = /^[0-9]*$/;
		if(!regexp.test(y)) return false;
		if(!regexp.test(m)) return false;
		if(!regexp.test(d)) return false;
		
		var dt=new Date(y,m-1,d);
		if(dt.getFullYear()!=y || dt.getMonth()!=m-1 || dt.getDate()!=d){
			return false;
		}
		
		return true;
	}
	

年月チェック | isYM()

	/**
	 * 年月チェック
	 * yyyy/mm形式とyyyy-mm形式に対応
	 * ※注意 onchangeイベントと全角入力では正しく検知できない。
	 * @param value 年月
	 * @returns true:入力OK    false:入力エラー
	 */
	function isYM(value){

		var ary=value.split("/");
		if(ary.length != 2){
			ary=value.split("-");
			if(ary.length != 2){
				return false;;
			}
		}
		
		let y = ary[0];
		let m = ary[1];
		
		let regexp = /^[0-9]*$/;
		if(!regexp.test(y)) return false;
		if(!regexp.test(m)) return false;

		var dt=new Date(y,m-1,1);
		if(dt.getFullYear()!=y || dt.getMonth()!=m-1 ){
			return false;
		}
		return true;
	}
	

カラーピッカー.jsの使い方 | cpick.js

cpick.jsの使用例
	<html lang="ja">
		<head>
			<meta charset="utf-8">
			<script src="jquery-1.11.1.min.js"></script>
			<script src="cpick.js"></script>
		</head>

	<body>

	<input type="text" name="c1" value="#ff5100" size="12" id="t1" class="html5jp-cpick" />
	<input type="text" name="c2" value="#00ff1b" size="12" id="t2" class="html5jp-cpick" />

	</body>
	</html>
	
cpick.jsのダウンロード先
サンプル

スレッドやタイマーのように間隔をあけて定期的に処理を行う | setInterval

setIntervalでスレッド(タイマー)を開始し、setTimeoutでスレッドを停止する。

ソースコード
	<html lang="ja">
		<head>
			<meta charset="utf-8">
			<script src="jquery-1.11.1.min.js"></script>
			<script>
				var m_index=0;
				var m_handlers=new Array();//setIntervalのハンドラリスト。スレッド停止に使用。
				
				//setIntervalによるスレッドを開始する。
				function start(){
					var h=setInterval("thread()",100);//スレッド開始。スレッドにする関数と間隔(ミリ秒)を指定する。
					m_handlers.push(h);//ハンドラをリストに追加
				}
				
				//スレッド。定期的に呼び出される関数
				function thread(){
					m_index++;
					$('#res').html(m_index);
				}
				
				//スレッドを停止する。
				function stop(){
					for(var i=0;i<m_handlers.length;i++){
						var h=m_handlers[i];//ハンドラを指定してスレッドを停止する。
						clearInterval(h);
					}
				}
			</script>
		</head>
	<body>
	<input type="button" value="start" onclick="start()" />
	<input type="button" value="stop" onclick="stop()" />
	→<span id="res"></span><br>
	</body>
	</html>
	
サンプル


他のスレッド関数について


ES6のクラス版のsetIntervalによるスレッド、バッチ処理、バックグラウンド


class Catdog{

	/**
	 * スレッドを開始する
	 */
	_startThread(){
		this.handlers = []; // スレッドのハンドラーリスト
		this.main_index = 0;
		var h = setInterval(()=>{this.thread();}, 300); // スレッド開始。スレッドにする関数と間隔(ミリ秒)を指定する。
		this.handlers.push(h); // ハンドラをリストに追加
	}
	
	/**
	 * スレッド | 定期的に呼び出される関数
	 */
	thread(){
		this.main_index ++;
		console.log(this.main_index);

	}
	
	/**
	 * スレッドを停止する。
	 */
	stopThread(){
		for(var i in this.handlers){
			var h = this.handlers[i];
			clearInterval(h); // スレッド停止
		}
	}
}
	

数値範囲入力チェックのバリデーション

	function test(){
		var v=$('#xxx').val();
		if(isRange(v,-9,20,true)==false){
			alert('-9~20で入力してください。必須です。');
		}
	}
	
	//数値範囲入力チェックのバリデーション
	function isRange(v,range1,range2,req){


		//必須入力チェック
		if(req==true){
			if(v == null || v === '' || v === false){
				return false;
			}
		}


		//数値チェックをする。
		if(isNaN(v)){
			return false;
		}

		//数値範囲チェックをする。
		if(range1 <= v && range2 >= v){
			return true;
		}else{
			return false;
		}


	}
	
サンプル

現在日時、現在日付、現在時刻を取得する

toLocaleString,toLocaleDateString,toLocaleTimeStringで現在日時、本日、現在時刻を取得できる。
フォーマットは地域ごとに自動設定される。日本ではy/m/d形式。
	//現在日時を取得
	var nowDt=new Date().toLocaleString();
	
	//本日を取得
	var today=new Date().toLocaleDateString();
		
	//現在時刻を取得	
	var nowTime=new Date().toLocaleTimeString();
	
参照

UNIXタイムスタンプと日時を相互変換

UNIXタイムスタンプに変換

	var d = new Date();
	var u = Math.floor(d);// UNIXタイムスタンプに変換
	

UNIXタイムスタンプからDateに変換

	var d = new Date(u); // UNIXタイムスタンプからDateに変換
	

jQuery版

	var u2 = Math.floor($.now() / 1000);
	

サンプル
参考

置換と全置換 | replace

最初に検索一致した文字を置換する

	var str="大きなnekoと小さなneko";
	var s1=str.replace('neko','猫');
	//出力→ s1=大きな猫と小さなneko
	

一致するすべての文字を置換する

	var str="大きなnekoと小さなneko";
	var s2=str.replace(/neko/g,'猫');
	//出力→ s2=大きな猫と小さな猫
	

変換元に変数を組み込む場合

	var str="大きなneko1と小さなneko2";
	var i=1;
	var regexp = new RegExp('neko' + i , 'g');
	var s3=str.replace(regexp,'猫');
	//出力→ s3=大きな猫とneko2
	
参照

cssをJavaScritで切り替える

ソースコード
	<;html lang="ja">;
		<;head>;
			<;meta charset="utf-8">;
			<;link rel="stylesheet" type="text/css" href="test_a.css" id="css_x">;
			<;script>;
				function test_a(){
					document.getElementById('css_x').href = 'test_a.css';
				}
				function test_b(){
					document.getElementById('css_x').href = 'test_b.css';
				}
			<;/script>;
		<;/head>;
		<;body>;
			<;div id="neko">;吾輩は猫である<;/div>;
			<;input type="button" value="CSS A" onclick="test_a()" />;
			<;input type="button" value="CSS B" onclick="test_b()" />;
		<;/body>;
	<;/html>;
	

test_a.css
	#neko{
		color:red;
	}
	

test_b.css
	#neko{
		color:blue;
	}
	
サンプル

文字数チェック | isMaxLength()

	/**
	 * 文字数チェックのバリデーション
	 * @param v			対象文字列
	 * @param maxLen	制限文字数
	 * @param req		trueは必須入力。0と半角SPは入力ありとみなす。引数省略時はfalse
	 * @return true:正常  false:異常
	 */
	function isMaxLength(v,maxLen,req){

		//必須入力チェック
		if(req==true){
			if(v == null || v === '' || v === false){
				return false;
			}
		}

		//最大文字数チェックをする。
		var n=v.length;
		if (n > maxLen){
			return false;

		}

		return true;
	}