2014年12月1日月曜日

JavaScriptで表示したテキストとファイルの出力で表示したテキストのどちらにも改行を入れる

ブラウザに表示されている文章をファイルに保存するの内容でファイルに出力した文字列に改行を入れたいという要望があったため、対応方法を紹介します。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>local file save</title>
<script>
window.onload = function(){
    //<div id="content">内にテキストを表示する
    var text = "";
    for ( var i = 0; i < 5; i++ ) {
        text = text + "テキストテキストテキスト" + "<br>\n";
    }
    var contentArea = document.querySelector("#content");
    contentArea.innerHTML = text;
}
</script>
</head>
<body>
<div id="content"></div>
<input type="button" value="保存" onclick="save();">
</body>
</html>

テキストを変数に入れて、指定の箇所に表示する時、改行を入れる必要があるならば、 + "
\n"を入れておくと、


このように改行有りで表示されます。この状態でファイルに出力すると、

テキストテキストテキスト<br>
テキストテキストテキスト<br>
テキストテキストテキスト<br>
テキストテキストテキスト<br>
テキストテキストテキスト<br>

このように
が入った状態で出力されます。この<br>を削除してファイル出力を行いたい場合は、ファイル出力の関数で

function save(){
    //<div id=”content”>で囲まれた箇所の文章を取得する
    var content = document.querySelector("#content").innerHTML;

    //文中にある<br>をすべて消す
    var content = content.replace(/<br>/g, "");
    
    //取得した文章をtextファイルの形式に変換
    //content.trim()は文章の前後のスペースを削除
    var blob = new Blob([content.trim()], {type : "text/plain"});

    //ダウンロードリンクを付ける
    var link = document.createElement("a");
    link.href = window.URL.createObjectURL(blob);

    //ダウンロードするファイル名を決めます
    link.download = "file.txt";

    //画面に一瞬だけダウンロードリンクを表示し、ファイルのダウンロードを行う
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

ファイルを出力する際に、var content = content.replace(/<br>/g, "");の処理を挟んでおくと、文中にある
はすべて消えます。

テキストテキストテキスト
テキストテキストテキスト
テキストテキストテキスト
テキストテキストテキスト
テキストテキストテキスト


<br>と\nですが、<br>はHTMLタグの一種で、ブラウザがHTMLを読み込んで表示する際、<br>を含む文字列で<br>の箇所で改行されるものです。\nは改行コードで、ソースコードを表示すると、\nの箇所で改行されています。

var content = content.replace(/<br>/g, "");ですが、変数(ここではcontent)の中に入っている文字列で、第一引数が置換(文字を指定の文字で置き換える)したい文字で/<br>/gの様に//gで挟んで中に置換したい文字(<br>)を入れることで、文中にあるすべての<br>を第二引数(ここでは空文字)に変えるという処理を行います。第一引数で//gではさまなかった場合は、変数内で最初に出現した<br>を置換するという処理になります。

0 件のコメント:

コメントを投稿