Вам не нужно выполнять весь утомительный почерк HTML, вы можете получить исходный код своей таблицы, используя объект javascript (это то, что я сделал в следующем примере).
Вы правы, есть встроенныйитератор строк DataTables, это every()
метод.
Что вам нужно сделать, это, в основном, получить необходимую запись, изменить ее, rows().remove()
oldзапишите, row.add()
новый и повторите draw()
.
Вот это DEMO :
//Define source data
var dataSrc = [
{id:1, name: 'John', lastname: 'Wayne'},
{id:2, name: 'Clark', lastname: 'Kent'},
{id:3, name: 'John', lastname: 'Romero'},
];
//Define DataTable object
var dataTable = $('#data_tables').DataTable({
sDom: 't',
data: dataSrc,
columns: [
{title: 'id', data: 'id'},
{title: 'name', data: 'name'},
{title: 'lastname', data: 'lastname'},
]
});
//Create dynamically interface for editing
$('body').append(`
<div id="editingform" style="display:none">
<select id="idselector">
<option value="" disabled selected>id</option>
</select>
</div>
`);
//Append fields that correspond to table columns minus id column
dataTable.columns().every(function(){
if(this.dataSrc() == 'id') return;
$('#editingform').append(`
<input class="fieldsinput" datasrc="${this.dataSrc()}" placeholder="${this.dataSrc()}"></input>
`);
});
//Populate id select with possible options
$.each(dataTable.column(0).data(), function(index, value){
$('#idselector').append(`
<option value="${value}">${value}</option>
`);
});
//Append 'Edit' button and make editing form visible
$('#editingform').append(`<button id="editbutton">Edit</button>`);
$('#editingform').show();
//Listen for id selection and populate input fields
$('#idselector').on('change', function(){
//Grab row with matching 'id' value
let rowData = dataTable.rows(`:has(td:eq(0):contains('${$(this).val()}'))`).data()[0];
//Update input fields
$.each(rowData, function(index, value){
$(`input[datasrc="${index}"]`).val(value);
});
})
//Change source data upon 'Edit' button click and redraw dataTable
$('#editbutton').on('click', function(){
//Prepare new entry
let newEntry = {id:$('#idselector').val()};
$.each($('.fieldsinput'), function(){
newEntry[$(this).attr('datasrc')] = $(this).val();
});
//Remove corresponding column, add new and redraw
dataTable.rows(`:has(td:eq(0):contains("${newEntry.id}"))`).remove();
dataTable.row.add(newEntry);
dataTable.draw();
});
<!doctype html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
</head>
<body>
<table id="data_tables"></table>
</body>