Обычно вам нужно передать некоторую привязку к желаемому имени свойства в атрибутах <td>
HTML (скажем, это будет атрибут prop
). Если вы не хотите, чтобы имена свойств были жестко закодированы (что не так гибко).
Далее вам просто нужно выбрать <tr>
узлы с установленным флажком (.has("input:checked")
) .
После этого вы перебираете выбранные строки, поворачивая первые (:lt()
) <td>
узлы, содержащие целевые данные, в свойства объекта:
$('#savebtn').on('click', () => {
const selectedRows = [...$('table tbody tr:has("input:checked")')]
.map(tr =>
[...$(tr).find('td:lt(2)')]
.reduce((res,td) => (res[$(td).attr('prop')]=$(td).text(), res),{}))
console.log(selectedRows)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<th>Event name</th><th>Visitors qty</th><th>visited</th>
</tr>
</thead>
<tbody>
<tr>
<td prop="eventname">Christmass Eve Party</td><td prop="qty">500</td><td><input type="checkbox"></input>
</tr>
<tr>
<td prop="eventname">Thanksgivin Day</td><td prop="qty">300</td><td><input type="checkbox"></input>
</tr>
<tr>
<td prop="eventname">Independence Day</td><td prop="qty">600</td><td><input type="checkbox"></input>
</tr>
</tbody>
</table>
<button id="savebtn">Save</button>