Here is a quick example of how to generate an HTML table from a comma-separated string. I’m not sure if this is what you are looking for, but I think at least this can be a starting point.
Template:
<div id="table-container"></div>
<script>
function generateTableFromString(commaSepString) {
const table = document.createElement('table');
const thead = table.appendChild(document.createElement('thead'));
const tbody = table.appendChild(document.createElement('tbody'));
commaSepString.split('\n').forEach((line, index) => {
let parent;
let cellTag;
if (index === 0) {
parent = thead;
cellTag = 'th';
} else {
parent = tbody;
cellTag = 'td';
}
const tr = parent.appendChild(document.createElement('tr'));
line.split(',').forEach((cell) => {
const cellElement = tr.appendChild(document.createElement(cellTag));
cellElement.appendChild(document.createTextNode(cell.trim()));
});
});
return table;
}
// convert an HTML fragment to plain text
var tempDiv = document.createElement('div');
tempDiv.innerHTML = `{{Front}}`;
document.documentElement.appendChild(tempDiv);
var commaSepString = tempDiv.innerText;
document.documentElement.removeChild(tempDiv);
var table = generateTableFromString(commaSepString);
document.querySelector('#table-container').appendChild(table);
</script>
The following code (an alternative to hkr’s solution) leads in 3 steps to the solution.
step 1: convert an HTML fragment into plain text. If you skip this step, the code split(\n) won’t work, as Anki doesn’t recognize the input value as multiple line value and you’ll receive an error message.
step 2: convert comma separated string into JSON 2D array
step 3 : convert JSON 2D array into HTML table and append to ids #table_head and #table_content
<div>
<table>
<thead>
<tr id="table_head">
</tr>
</thead>
<tbody id="table_content">
</tbody>
</table>
</div>
<script src='_jquery.js'></script>
<script>
// step 1: convert an HTML fragment into plain text. If you skip this step, the code split(\n) won't work, as Anki doesn't recognize the input value as multiple line value and you'll receive an error message.
var tempDiv = document.createElement('div');
tempDiv.innerHTML = '{{inflection}}';
document.documentElement.appendChild(tempDiv);
var commaSepString = tempDiv.innerText;
document.documentElement.removeChild(tempDiv);
// step 2: convert comma separated string into JSON 2D array
function csvJSON(csv) {
const lines = csv.split('\n');
const result = []
const headers = lines[0].split(',')
for (let i = 1; i < lines.length; i++) {
if (!lines[i])
continue
const obj = {}
const currentline = lines[i].split(',')
for (let j = 0; j < headers.length; j++) {
obj[headers[j]] = currentline[j]
}
result.push(obj)
}
return result
}
const json = csvJSON(commaSepString)
// step 3 : convert JSON 2D array into HTML table and append to ids #table_head and #table_content
//code source: https://stackoverflow.com/questions/1051061/convert-json-array-to-an-html-table-in-jquery
// Get Table headers and print
for (var k = 0; k < Object.keys(json[0]).length; k++) {
$('#table_head').append('<td>' + Object.keys(json[0])[k] + '</td>');
}
// Get table body and print
for (var i = 0; i < Object.keys(json).length; i++) {
$('#table_content').append('<tr>');
for (var j = 0; j < Object.keys(json[0]).length; j++) {
$('#table_content').append('<td>' + json[i][Object.keys(json[0])[j]] + '</td>');
}
$('#table_content').append('</tr>');
}
</script>