Проблема
Входные элементы в исходной строке таблицы имеют теги id
.Вы добавляете новую строку, добавляя клон в последнюю строку таблицы.
var newRow = $("#myTable tr:last").clone().appendTo("#myTable");
Это означает, что все новые входы будут иметь одинаковые id
s.Если вы попытаетесь получить доступ к входным значениям через вход id
s, то вы получите только первый присутствующий в DOM.
Кроме того, в вашей функции csv
вы получаете входы только один раз.Вы должны получать их каждый раз, когда получаете доступ к строке.
Решение
Измените таблицу в своем HTML, чтобы иметь входные данные в форме:
<input name="titel" class="titel" type="text">
Обратите внимание, чтоАтрибут id
был изменен на class
.Полный tbody
:
<tbody>
<tr>
<td>
<p>
<label>
<input type="checkbox" name="chk"/>
<span></span>
</label>
</p>
</td>
<td>
<div class="input-field">
<div>
<select class="browser-default genderSelect" required>
<option value="new" selected>Bitte auswählen</option>
</select>
</div>
</div>
</td>
<td>
<div class="input-field">
<div>
<select class="browser-default gsAddress" required>
</select>
</div>
</div>
</td>
<td>
<input name="titel" class="titel" type="text">
</td>
<td>
<input name="vorname" class="vorname" type="text" class="validate">
</td>
<td>
<input name="nachname" class="nachname" type="text" class="validate">
</td>
<td>
<input name="email" class="email" type="text" class="validate">
</td>
</tr>
</tbody>
В вашей функции csv
получите NodeList строк вашей таблицы.Затем вы шагаете по списку, то есть получаете доступ к таблице строка за строкой, и получаете входные данные из каждой строки по имени класса.Из этого вы можете создать свой CSV-файл.
function csv() {
var rowList = document.getElementById('myTable').getElementsByTagName('tbody')[0].getElementsByTagName('tr');
let csvContent = "data:text/csv;charset=utf-8,";
for( var r = 0; r < rowList.length; r++ ) {
var row = rowList[ r ];
var titel = row.getElementsByClassName('titel')[0].value;
var vorname = row.getElementsByClassName('vorname')[0].value;
var nachname = row.getElementsByClassName('nachname')[0].value;
var email = row.getElementsByClassName('email')[0].value;
csvContent += [titel, vorname, nachname, email].join(";") + "\r\n";
}
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "export.csv");
document.body.appendChild(link); // Required for FF
link.click(); // This will download the data file named "my_data.csv".
}