He intentado diferentes enfoques, pero me falta algo crucial:
Aquí hay una versión de violín
function saveData() { var table = document.getElementById("dtable"); var [, ...tr] = table.querySelectorAll("tr"); var tableData = [...tr].map(r => { var td = r.querySelectorAll("td"); return [...td].map((c, j) => j < 6 ? c.innerHTML : j == 6 ? c.querySelectorAll("select")[0].value : j == 7 ? c.querySelectorAll('comments')[0].value); }) tableData = tableData.filter(e => e[6] != 'empty'); }Nota para fines de recuento de columnas: la primera columna de la tabla está oculta.
Esta es la columna cuyos datos se van a tomar:
<td><input type="text" name="comments" style="width:99%;"></td>¡Aprecio tu ayuda!
Aquí está la solución, que fue dada por un alma buena en Fiddle:
function saveData() { var table = document.getElementById("dtable"); var [, ...tr] = table.querySelectorAll("tr"); var tableData = [...tr].map(r => { var td = r.querySelectorAll("td"); return [...td].map((c, j) => j < 6 ? c.innerHTML : j == 6 ? c.querySelectorAll("select")[0].value : j == 7 ? c.querySelectorAll('input[name="comments"]')[0].value : '')}) tableData = tableData.filter(e => e[6] != 'empty'); }y esto es lo que ha cambiado:
De:
c.querySelectorAll('comments')[0].valueA
c.querySelectorAll('input[name="comments"]')[0].valueNo estoy seguro de por qué él / ella no publicaría la respuesta él mismo.