表格是这样的:
<table id="sample_table">
<tr>
<td>1</td>
<td><input type="text" size="5" id="in2" name="txt2" value="0"/></td>
<td><input type="text" size="5" id="in3" name="txt3" value="0"/></td>
<td><input type="text" size="5" id="in4" name="txt4" value="0"/></td>
</tr>
js代码是这样的:
function export(filename) {
var csv = [];
var rows = document.getElementById('tbl_posts').querySelectorAll("table tr");
for (var i = 0; i < rows.length; i++) {
var row = [], cols = rows[i].querySelectorAll("td, th");
for (var j = 0; j < cols.length; j++){
row.push(cols[j].innerText);
}
csv.push(row.join(","));
}
// Download CSV file not posted here
downloadCSV(csv.join("\n"), filename);
}
和导出按钮:<button type="button" onclick="export('myFile')">Export</button>
因为它读取 td 而不是输入字段,所以它会将空 '' 字符串添加到 csv 列表中。如何访问输入并将它们推送到行列表中?
最佳答案
如果您可以确保只有输入作为 td 内的子节点出现,则可以使用以下方法。在迭代 td 时检查是否有任何子节点(仅在输入位于 td 内时才会在您的示例中发生)。
如果有 child (输入),请使用 .value
在 child 身上获得值(value)。否则使用 .innerText
.如果有不清楚的地方,欢迎评论:)
function fetchData(filename) {
var csv = [];
var rows = document.getElementById('sample_table').querySelectorAll("table tr");
for (var i = 0; i < rows.length; i++) {
var row = [],
cols = rows[i].querySelectorAll("td, th");
for (var j = 0; j < cols.length; j++) {
if (cols[j].children.length > 0) { //assuming your structure is always the same and the table only contains inputs as child elements inside a td
row.push(cols[j].firstChild.value);
} else {
row.push(cols[j].innerText);
}
}
csv.push(row.join(","));
}
console.log(csv);
}
<table id="sample_table">
<tr>
<td>1</td>
<td><input type="text" size="5" id="in2" name="txt2" value="0" /></td>
<td><input type="text" size="5" id="in3" name="txt3" value="0" /></td>
<td><input type="text" size="5" id="in4" name="txt4" value="0" /></td>
</tr>
</table>
<button type="button" onclick="fetchData('myFile')">Export</button>
关于javascript - 如何使用javascript导出带有输入字段的表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63352170/