SQLの窓

2017年11月13日


HTML 上のデータをローカルに保存する jQuery プラグイン

FileSaver.js が必要です。

保存タイプ

1) text 
    要素の内部テキストを取得( value または innerText )
    ※ nobom プロパティを true にすると UTF8N で保存されます
    ( nobom のデフォルトは false )

2) html
    要素の outerHTML を取得

3) table
    テーブル要素を csv データとして取得
    ※ nobom プロパティを false にして UTF8 で保存する事によって、Excel で読み込めます
    ( nobom のデフォルトは false )

4) image (URL で指定された画像の場合)
    そのままそのサーバーからダウンロード
    IE が、A 要素の download 属性をサポートしていないので IE は 不可
    ( ie プロパティでその際のエラーメッセージ指定できます )

5) image (base64 で指定された画像の場合)
    base64 をバイナリに変換して保存


所属コード所属名称作成日更新日
0001営業部第一2004/05/052004/05/05
0002営業部第二2004/05/052004/05/05
0003営業部第三2004/05/052004/05/05
1001総務部2008/04/022008/04/02

デモ用のコード
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.js"></script>
<script src="https://lightbox.sakura.ne.jp/demo/template/lightbox-env/saver.js"></script>
<script>
$(function(){

	$("#btn_text")
		.on( "click", function(){
			$("#textarea").save( {
				type : "text",
				name : "mydata.txt",
				nobom : true
			} );
		});

	$("#btn_tbl")
		.on( "click", function(){
			$("#tbl").save( {
				type : "table",
				name : "mydata.csv",
				nobom : false
			} );
		});

	$("#btn_html")
		.on( "click", function(){
			$("body").save( {
				type : "html",
				name : "mydata.html",
				nobom : true

			} );
		});

	// IE は対象外
	$("#btn_img")
		.on( "click", function(){
			$("#img").save( {
				type : "image",
				ie: "IE では画像を右クリックしてメニューから保存して下さい"			// IE 用メッセージ
			} );
		});

	// IE も OK
	$("#btn_base64")
		.on( "click", function(){
			$("#base64").save( {
				type : "image"
			} );
		});

	$("#btn_img,#btn_text,#img,#textarea,#base64,#btn_base64")
		.css({ "display": "inline-block", "vertical-align": "top" });

	$("#tbl")
		.css({ "margin-top": "15px" });


});


</script>
<div>
<input id="btn_text" type="button" value="textarea(テキスト)">
<input id="btn_tbl" type="button" value="テーブル(CSV)">
<input id="btn_html" type="button" value="BODY(HTML)">
<input id="btn_img" type="button" value="画像(URL)">
</div>
<div style='margin-top:10px'>
<input id="btn_base64" type="button" value="画像(base64)">
<img id="base64"  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAASdSURBVEhLlVZ/TNRlGP/ccSRwcMkEhLWgVAItwDxysaWLVmKj8aN/GvRjiYFzyq9qE2uJILUkJhtji2BOc9ay1ejXGIOkBsEKuqSrtSRS2ik/5owxjsjweHre5/3CHcpN+YwP73PP+3nf5/3xvM8daCX4oYPo5aeIvvnUcNwebh1kdoboWBnRAyxNYNqZicyNzHf2cb/bEPoHK/2g50ui/CSiWJaoAEnMzaCT60060IPMZKbqf26z3qUfsMIHnut61WpCtepUZhrzIebJN+jj480EgBr3FxC9lqmDPWLWuvuYW5jNh4zJvOBlcaQFVOQCn38GRLI9H4Devz34MTgav2x/FiOXLsPZ14Mro5dhi1yLjWnbcNe1SWxynsVWmwlPhptgCZwHxtQ8h4HdlTKlQEIZmLkHVBYNWh0AWfFKucoEKo0CudXOfOD91Npw06Ds7Gyqra2ljo4OcrlchlBjfHycuru7qb6+XnQWi2XJWPq9z1D6HtcTVpi//kcUJSUlKC8vx9zcHOLj46VboaurC4GBgTCZTDCbzeCJ5bPVasXIyAgyMjJgZt2BNcBb+elAQ5ceKKGGBoniQb33e1fiS6fTSbGxscv23chT9khOBp42zntI2irdSZTCJqfkhUujiwNyc3OlTU5OJofDQTk5OZSXlye+sLAwSk9PFzslJYUSEhLE7u3p0e+IF0wnamR6HYQvXILU7CLHBZeIMzM5RRnKVrvwhfIlJSXR4OCg2E1NTVRVVSW2468xold4rHpDD3N6Kz2dadBR1zEnx+ls93ciLiws1AK24+LixB4eHqbi4mLx2Ww22rFjh9ipqakUEREh9sTkFJFrSI6fNjCHznEQ9ar5JdNOPksGX66ICwr4wTGUnZiYSKOj3mP0x6ioKBkj2MRzqtN5/Rky4+m9wBxL/rjC/xgBFt36ICQkBHV1dWKXlpZKyytHf38/2tvb0dbWhoGBAUxMTEgf+toAD7f/MbdlcXgFdSeqlLxbQV2On2VVvjux2+3EaS22SgDVxsTESP+yeGGLrm2q1DBUWgNZGZAEb34bXBvE5QvWge9A7KCgIGnHxlT9WAae68C3P+mdPL9LXDrI3jcBN7cm5nuHxOULFSQ4OFjs6elpcOaJXV1dLe0SNB4A7uR2irm/Vlw6SKIdiOYd8J+l8xNxzc9zsTOgXvbMzIzYHo8Hra2tYldWVqKlpUXsRbQc4wHcpm4AVkeISwdR2FMD/Au4SG0HCF2jBQput1suVoEfnZQSrmfyuaioSErP985fgYGvxIdZ5r6j2laQmzEwtd6bjsMfNYtv7br4Rd8Ncvrz4kXCKuuS/oMxoFm/VZixIMwPZ7d6sY+G0GDFi4v+Ex98aCh90Pk+NfHEAYZmgb5Y8qX1asVBhF1zo7K/EbjKjhDmHcARF9+FNRSHf+OMsoTypXJnfRlw+jSnG2usTH4T5yfZvTUHofcmoO4oZ+oCJNRy6DxD9Hi4LjcLX8PKfsymW/WuFFW1zbqbqO2UMfBmsOIWOH+OaM92/YNBTapKhaqy6jdAzW6iq+OG0D9YuQIcP0L0UhpR9xeG43ZA9D+D0zyeXYGzAwAAAABJRU5ErkJggg==">
<img id="img" src="http://toolbox.winofsql.jp/image/jquery.png">
<textarea id="textarea">あいうえお</textarea>
</div>

<table id="tbl">
<tbody><tr><th>所属コード</th><th>所属名称</th><th>作成日</th><th>更新日</th></tr>
<tr><td>0001</td><td>営業部第一</td><td>2004/05/05</td><td>2004/05/05</td></tr>
<tr><td>0002</td><td>営業部第二</td><td>2004/05/05</td><td>2004/05/05</td></tr>
<tr><td>0003</td><td>営業部第三</td><td>2004/05/05</td><td>2004/05/05</td></tr>
<tr><td>1001</td><td>総務部</td><td>2008/04/02</td><td>2008/04/02</td></tr>
</tbody></table>


saver.js

$.fn.extend({

	save : function(option){

		option = option || {};
		var type = option.type || "text";
		var mime = option.mime || "text/plain";
		var name = option.name || "save.txt";

		var charset = "utf-8";
		var nobom = option.nobom || false;

		if( type == "text" ) {
			var text = $(this).val();
			if ( text == "" ) {
				text = $(this).text();
			}
			saveAs(
				new Blob(
					[text]
					, {type: mime + ";charset=" + charset}
				)
				, name, nobom
			);

		}

		if( type == "html" ) {
			var text = $(this).prop("outerHTML");
			saveAs(
				new Blob(
					[text]
					, {type: mime + ";charset=" + charset}
				)
				, name, nobom
			);
		}

		if( type == "table" ) {
			var csv = "";
			var cnt = 0;
			$(this).find("tr").each( function(){

				$(this).find("td,th").each(function( col_cnt ){
					if ( col_cnt != 0 ) {
						csv += ",";
					}
					csv += "\"" + $(this).text() + "\"";
				});
				csv += "\n";
				cnt++;

			} );
			saveAs(
				new Blob(
					[csv]
					, {type: mime + ";charset=" + charset}
				)
				, name, nobom
			);
		}

		if( type == "image" ) {
			var src = $(this).prop("src");
			// base64 bin
			if ( src.substr(0,5) == "data:" ) {
				var bin = atob(src.split(',')[1]);
				var head = src.split(',')[0];
				var type = head.split(/[:;]/)[1];
				var buffer = new Uint8Array(bin.length);
				for (var i = 0; i < bin.length; i++) {
					buffer[i] = bin.charCodeAt(i);
				}
				var blob = new Blob([buffer.buffer], {type: type});
				if ( type == "image/jpeg" ) {
					name = "save" + (new Date()).getTime()+".jpg";
				}
				if ( type == "image/gif" ) {
					name = "save" + (new Date()).getTime()+".gif";
				}
				if ( type == "image/png" ) {
					name = "save" + (new Date()).getTime()+".png";
				}
				saveAs( blob, name );
			}
			// url
			else {
				var userAgent = window.navigator.userAgent.toLowerCase();
				// OLD IE
				if (userAgent.indexOf("msie") > -1) {
					if ( typeof option.ie !==  'undefined' ) {
						alert(option.ie);
					}
					else {
						alert("unsupported!");
					}
					return;
				}
				// IE11
				else if (userAgent.indexOf("trident/7.0") > -1) {
					if ( typeof option.ie !==  'undefined' ) {
						alert(option.ie);
					}
					else {
						alert("unsupported!");
					}
					return;
				}
				else {
					var work = src.split("/");
					var name = work[work.length-1];
					var download = $("<a></a>").css("display","none").appendTo("body");
					download.prop({"href" : src, "download": name });
					download.get(0).click();
					download.remove();
				}
			}

		}

		return $(this);

	}
});





posted by lightbox at 2017-11-13 11:13 | Comment(0) | プラグイン作成(jQuery) | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり