JQuery добавить столбец HTML-таблицы
У меня есть таблица HTML, например:
<table border="1">
<tbody>
<tr>
<td><a href="#" class="delete">DELETE ROW</a>COL 1</td>
<td><a href="#" class="delete">DELETE COL</a>COL 2</td>
<td><a href="#" class="delete">DELETE COL</a>COL 3</td>
<td><a href="#" class="delete">DELETE COL</a>COL 4</td>
<td><a href="#" class="delete">DELETE COL</a>COL 5</td>
<td><a href="#" class="delete">DELETE COL</a>COL 6</td>
</tr>
<tr>
<td>ROW 1</td>
<td>ROW 1</td>
<td>ROW 1</td>
<td>ROW 1</td>
<td>ROW 1</td>
<td>ROW 1</td>
</tr>
<tr>
<td>ROW 2</td>
<td>ROW 2</td>
<td>ROW 2</td>
<td>ROW 2</td>
<td>ROW 2</td>
<td>ROW 2</td>
</tr>
</tbody>
</table>
Мне нужна функция добавления нового столбца с числом td на основе других столбцов. Дело в том, что в этой таблице HTML столбцы удаляются с помощью jQuery перед добавлением новых столбцов, поэтому функция должна получить текущую конфигурацию столбца и соответствующим образом адаптироваться, потому что строки и столбцы всегда удаляются или добавляются.
У меня есть этот код для добавления нового столбца, но он не добавляет заголовок:
function addACol() {
var currentNumberOfTDsInARow = $('.tblModel tr:first td').length;
newColNum = currentNumberOfTDsInARow;
var rows = $('.tblModel tbody tr');
for (var i = 0; i < rows.length; i++) {
var lastTDClone = $(rows[i]).find('td:last').clone();
$(rows[i]).find('td:last').after(lastTDClone);
}
}
Ответы
Ответ 1
Обновление...
var c = $("#myTable tr:first td").length;
$("#myTable tr:first").append("<td><a href=''>Delete</a> Col "+(c+1)+"</td>");
$("#myTable tr:gt(0)").append("<td>Col</td>");
Если вам нужно исправить нумерацию в заголовках, вы можете использовать функцию, над которой мы работали в предыдущем вопросе.
Оригинальный ответ...
$("#myTable tr").append("<td>New Column</td>");
Или, если вы хотите добавить заголовок тоже, вы можете ограничить предыдущую строку на все TR больше 0:
$("#myTable tr:gt(0)").append("<td>New Column</td>");
И заголовок будет только на первом TR:
$("#myTable tr:first").append("<td>Delete Column LINK</td>");
Ответ 2
Не связано с вашим вопросом, но вы можете сделать свой HTML-бит более семантическим.
<table border="1">
<thead>
<tr>
<th><a href="#" class="delete">DELETE ROW</a>COL 1</th>
<th><a href="#" class="delete">DELETE COL</a>COL 2</th>
<th><a href="#" class="delete">DELETE COL</a>COL 3</th>
<th><a href="#" class="delete">DELETE COL</a>COL 4</th>
<th><a href="#" class="delete">DELETE COL</a>COL 5</th>
<th><a href="#" class="delete">DELETE COL</a>COL 6</th>
</tr>
</thead>
<tbody>
<tr>
<td>ROW 1</td>
<td>ROW 1</td>
<td>ROW 1</td>
<td>ROW 1</td>
<td>ROW 1</td>
<td>ROW 1</td>
</tr>
<tr>
<td>ROW 2</td>
<td>ROW 2</td>
<td>ROW 2</td>
<td>ROW 2</td>
<td>ROW 2</td>
<td>ROW 2</td>
</tr>
</tbody>
</table>
Измененный код jQuery может выглядеть так:
var c = $("#myTable thead th").length;
$("#myTable thead tr").append("<th><a href=''>Delete</a> Col "+(c+1)+"</th>");
$("#myTable tr:gt(0)").append("<td>Col</td>");