JavaScriptでファイルダウンロード処理を実現する

毎回調べるのが面倒なのでメモ。

var downloadAsTextFile = function(fileName, content) {
    var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
    var blob = new Blob([bom, content]);
    var url = window.URL || window.webkitURL;
    var blobURL = url.createObjectURL(blob);

    var a = document.createElement('a');
    a.download = fileName;
    a.href = blobURL;
    a.click();  
};

var downloadAsFile = function(fileName, content) {
    var a = document.createElement('a');
    a.download = fileName;
    a.href = 'data:application/octet-stream,'+encodeURIComponent(content);
    a.click();
};

https://qiita.com/wadahiro/items/eb50ac6bbe2e18cf8813

https://ja.stackoverflow.com/questions/300/javascript%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%95%E3%81%9B%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%A9%E3%81%86%E3%81%97%E3%81%9F%E3%82%89%E8%89%AF%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B


var content = "";
$(".transaction_list").each(function(i, e) {
  a = $(".amount ~ td:first", e).clone();
  a.children().empty();
  ary = [
    $("#user_asset_act_id", e).val(),
    $("#user_asset_act_large_category_id", e).val(),
    $("#user_asset_act_middle_category_id", e).val(),
    $("#user_asset_act_sub_account_id_hash", e).val(),
    $("#user_asset_act_table_name", e).val(),
    $("#user_asset_act_is_income", e).val(),
    $("#user_asset_act_is_target", e).val(),
    $("#user_asset_act_memo", e).val(),
    
    $(".date", e).attr("data-table-sortable-value"),
    $(".date span", e).text(),
    
    $(".content span", e).text(),
    
    $(".amount span.offset", e).text(),
    
    a.text().trim(),
    $(".amount ~ td:first div", e).text(),
    $(".amount ~ td:first", e).attr("data-original-title"),
    
    $(".lctg a", e).text().trim(),
    $(".mctg a", e).text().trim(),
  ];
  for (var j = 0, m = ary.length; j < m; ++j)
  {
    content += '"' + ("" + ary[j]).replace('"', '""') + '"';
    if (j !== m)
    {
      content += ',';
    }
  }
  content += '\n';
});


var downloadAsTextFile = function(fileName, content) {
    var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
    var blob = new Blob([bom, content]);
    var url = window.URL || window.webkitURL;
    var blobURL = url.createObjectURL(blob);

    var a = document.createElement('a');
    a.download = fileName;
    a.href = blobURL;
    a.click();  
};
downloadAsTextFile("hoge.csv", content);