Проблема в том, что вы добавляете HTML-код table
в предыдущую ячейку. HTML-код не содержит измененное свойство value
элементов input
, в которые пользователь вводил данные. Чтобы исправить это, скопируйте элементы из DOM, а не их HTML.
Также обратите внимание, что ваша логика может быть упрощена. Во-первых, вам не нужен цикл each()
, поскольку вы можете напрямую применить обработчик события click()
к коллекции элементов button
. Вы также можете работать с самим объектом jQuery, вместо того, чтобы циклически обходить его, чтобы создать бессмысленный массив объектов jQuery, который вам нужно снова повторить.
$('#tblContent button').click(function() {
var $container = $(this).closest('td.container');
var $content = $container.next().children()
$container.empty().append($content);
});
.container {
width: 256px;
padding: 8px;
}
.container.border {
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="tblContent">
<tbody>
<tr>
<td class='container border'>
<table style="table-layout:fixed;width:100%'">
<tbody>
<tr>
<td>
<label class="checkbox-inline"><input type="checkbox" data-name="isactive" value="1">Column 1 OK?</label>
</td>
<tr>
<td>
<input type="text" placeholder="Put something here 1" maxlength="64" style="width:100%" />
</td>
</tr>
<tr>
<td>
<input type="text" placeholder="Put something here 2" maxlength="64" style="width:100%" />
</td>
</tr>
<tr>
<td><button disabled>Deleteme</button></td>
</tr>
</tbody>
</table>
</td>
<td class='container border'>
<table style="table-layout:fixed;width:100%'">
<tbody>
<tr>
<td>
<label class="checkbox-inline"><input type="checkbox" data-name="isactive" value="1">Column 2 OK</label>
</td>
<tr>
<td>
<input type="text" placeholder="Put something here 3" maxlength="64" style="width:100%" />
</td>
</tr>
<tr>
<td>
<input type="text" placeholder="Put something here 4" maxlength="64" style="width:100%" />
</td>
</tr>
<tr>
<td><button>Deleteme</button></td>
</tr>
</tbody>
</table>
</td>
<td class='container border'>
<table style="table-layout:fixed;width:100%'">
<tbody>
<tr>
<td>
<label class="checkbox-inline"><input type="checkbox" data-name="isactive" value="1">Column 3 OK</label>
</td>
<tr>
<td>
<input type="text" placeholder="Put something here 5" maxlength="64" style="width:100%" />
</td>
</tr>
<tr>
<td>
<input type="text" placeholder="Put something here 6" maxlength="64" style="width:100%" />
</td>
</tr>
<tr>
<td><button disabled>Deleteme</button></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
Наконец, я бы посоветовал вам рассмотреть, как вы структурируете HTML-код этой страницы. Это опасно близко к плохой практике использования элементов макета table
в конце 90-х годов. table
следует использовать только для табличных данных.
Макет, который вы пытаетесь достичь, можно сделать намного проще, используя div
вместе с некоторым CSS для его стилизации, за долю кода.