2017-03-03 17 views
0

テーブルを入力してcsvにエクスポートします。以下は私のコードですテーブルをcsvにエクスポートできません

<html> 
<head> 
    <title></title> 
</head> 
<body> 


<div class="container"> 
    <h1>Build Table</h1> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

    <div> 
     <table id="blacklistgrid"> 
      <tr id="Row1"> 
       <td>Week Number</td> 
       <td>Oranges Sold</td> 
       <td>Apples Sold</td> 
      </tr> 
      <tr class="Row2"> 
       <td> 
        <input type="text"/> 
       </td> 
       <td> 
        <input type="text"/> 
       </td> 
       <td> 
        <input type="text"/> 
       </td> 
      </tr> 
     </table> 
     <button type="button" id="btnAdd">Add Row!</button> 
     <button><a href="#" class="export">Export Table data into Excel</a></button> 
    </div> 

    <script> 
    jQuery(document).ready(function() { 
    jQuery('#btnAdd').click(function() { 
      jQuery(".Row2").clone().appendTo("#blacklistgrid"); 

     }); 
    }); 


$(document).ready(function() { 

    function exportTableToCSV($table, filename) { 

    var $rows = $table.find('tr:has(td)'), 

     // Temporary delimiter characters unlikely to be typed by keyboard 
     // This is to avoid accidentally splitting the actual contents 
     tmpColDelim = String.fromCharCode(11), // vertical tab character 
     tmpRowDelim = String.fromCharCode(0), // null character 

     // actual delimiter characters for CSV format 
     colDelim = '","', 
     rowDelim = '"\r\n"', 

     // Grab text from table into CSV formatted string 
     csv = '"' + $rows.map(function(i, row) { 
     var $row = $(row), 
      $cols = $row.find('td'); 

     return $cols.map(function(j, col) { 
      var $col = $(col), 
      text = $col.text(); 

      return text.replace(/"/g, '""'); // escape double quotes 

     }).get().join(tmpColDelim); 

     }).get().join(tmpRowDelim) 
     .split(tmpRowDelim).join(rowDelim) 
     .split(tmpColDelim).join(colDelim) + '"'; 

    // Deliberate 'false', see comment below 
    if (false && window.navigator.msSaveBlob) { 

     var blob = new Blob([decodeURIComponent(csv)], { 
     type: 'text/csv;charset=utf8' 
     }); 

     // Crashes in IE 10, IE 11 and Microsoft Edge 
     // See MS Edge Issue #10396033 
     // Hence, the deliberate 'false' 
     // This is here just for completeness 
     // Remove the 'false' at your own risk 
     window.navigator.msSaveBlob(blob, filename); 

    } else if (window.Blob && window.URL) { 
     // HTML5 Blob 
     var blob = new Blob([csv], { 
     type: 'text/csv;charset=utf-8' 
     }); 
     var csvUrl = URL.createObjectURL(blob); 

     $(this) 
     .attr({ 
      'download': filename, 
      'href': csvUrl 
     }); 
    } else { 
     // Data URI 
     var csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv); 

     $(this) 
     .attr({ 
      'download': filename, 
      'href': csvData, 
      'target': '_blank' 
     }); 
    } 
    } 

    // This must be a hyperlink 
    $(".export").on('click', function(event) { 
    // CSV 
    var args = [$('#blacklistgrid'), 'export.csv']; 

    exportTableToCSV.apply(this, args); 

    // If CSV, don't do event.preventDefault() or return false 
    // We actually need this to be a typical hyperlink 
    }); 
}); 


    </script> 

</body> 
</html> 

私はテーブルを埋めることができ、動的に行を追加することができます。しかし、私は満たされたデータをCSVファイルにエクスポートすることはできません。私は間違って何をしていますか?

答えて

1

入力エレメントを使用しているため、メソッドは機能しません。実質的には、<td>エレメントの間には何もありません。代わりに、val()メソッドを使用して、入力要素からテキストを取得します。 https://jsfiddle.net/dzy5ktv6/

tdの代わりにinput要素を選択するようにセレクタを変更しました。

関連する問題