JSFiddle - React, Tailwind, and code Playground

by Diego La Monica

HTML

<table class=" aligncenter">
<tbody>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Phone Number</td>
<td>Email</td>
<td>Web Site</td>
<td>Export</td>
</tr>
<tr>
<td>Diego</td>
<td>La Monica</td>
<td>+39 333 7235382</td>
<td>me@example.com</td>
<td>http://diegolamonica.info</td>
<td><input type="checkbox" /></td>
</tr>
<tr>
<td>Joe</td>
<td>Average</td>
<td>+12 345 67890</td>
<td>joe@example.com</td>
<td>http://example.com</td>
<td><input type="checkbox" /></td>
</tr>
</tbody>
</table>
<a href="#">Download data</a>

CSS

/* feel free to use your own CSS */

JavaScript

function table2CSV(){
	var dataURL = '',
		fieldSeparator = ';',
		textField = '"',
		lineSeparator = '\n',
		regExpTesto = /(")/g,
		regExp = /[";]/;
	
	$('table tr').each( function(){
		var dataRow = '';
		if($('input:checkbox', this).is(':checked') || $(this).is(':first-child')){
			$('td', this).not(':last').each( function(){
				var value = $(this).text();
				if(dataRow!='') dataRow += fieldSeparator;
				
				if(regExp.test(value)){
					value = textField + value.replace(regExpTesto, '$1$1') + textField;
				}
				dataRow += value;
				
			});
			if(dataURL != '') dataURL += lineSeparator;
			dataURL += dataRow;
		}
	});
	window.location.href = 'data:text/csv;charset=utf-8;base64,' + btoa(dataURL);
}

$('a').on('click', function(event){
    event.preventDefault();
    table2CSV();
});