Javascript/jQuery: динамическое добавление строк в тело таблицы (с использованием массивов)
Я новичок в Javascript и надеюсь, что кто-то здесь поможет мне в этом.
У меня есть HTML-страница со таблицей на ней и хотелось бы использовать JS для динамического добавления строк с определенным контентом в тело таблицы.
До сих пор у меня есть приведенный ниже код, который здесь сокращен (в действительности больше строк и столбцов и т.д.), что вызывает у меня следующие проблемы:
- Когда я запустил это, он вставляет динамический HTML над таблицей вместо
внутри тела таблицы.
- Он не применяет к нему никаких стилей (которые определяются классами
в моем CSS), поэтому он просто показывает содержимое ячеек без применения
границы или ширины столбцов и т.д. Должен ли я как-то сказать это
он также должен применять стили CSS к этому?
- Кроме того, мне было интересно, есть ли способ, который в первой переменной I
не нужно перечислить все номера отдельно, а вместо этого просто напишите
первый (1) и последний (5) номер серии, поскольку они просто просты
последовательности, такие как 1, 2, 3, 4, 5.
Может кто-нибудь сказать мне, что я делаю неправильно здесь?
Мой JS:
$('#btnStart').on('click', function(){
var cols = [1, 2, 3, 4, 5];
var tbody = '';
var i;
for (i = 0; i < cols.length; i++) {
tbody += cols[i] + "<tr> \
<td class='td col1'>1</td> \
<td class='td col2'>2</td> \
<td class='td col3'><div contenteditable='true' class='editable'></div></td> \
</tr>";
}
$('#bodyCal').html(tbody);
});
Мой HTML:
<table class="tblCal">
<colgroup>
<col class="col1" />
<col class="col2" />
<col class="col3" />
</colgroup>
<thead>
<tr>
<th colspan="3" class="th th2">Col 1</th>
</tr>
</thead>
<tbody>
<div id="bodyCal"></div>
</tbody>
</table>
Ответы
Ответ 1
Вы должны настроить таргетинг tbody
, чтобы присвоить ему ID. Также обратите внимание, что div
не может быть дочерним элементом tbody
Допустимое содержимое: ноль или более элементов <tr>
.
Соответствующие изменения HTML:
<tbody id="bodyCal">
</tbody>
Для третьего вопроса:
var tbody = '';
for (var i = 1; i <= 5; i++) {
tbody += "<tr> <td class='td col1'>" + i +" </td> \
<td class='td col2'>2</td> \
<td class='td col3'><div contenteditable='true' class='editable'></div></td> \
</tr>";
}
$('#bodyCal').html(tbody);
DEMO
Ответ 2
За третий вопрос:
var cols = [1, 5];
for (i = cols[0]; i <= cols[1]; i++) {
теперь ваш цикл for будет работать со значениями 1, 2, 3, 4 и 5 для i.
Вы можете упростить его:
для (i = 1; я <= 5; я ++) {
Но это устраняет возможность передачи начального и конечного параметров, поэтому не так практично при тестировании разных диапазонов.
Ответ 3
Вы должны поместить идентификатор bodyCal рядом с тегом body таблицы, так как таблица не может содержать div, если только это не обернуто в тег td. Попробуйте следующее:
$('#btnStart').on('click', function(){
var cols = [1, 2, 3, 4, 5];
var tbody = "";
var i;
for (h = 0; h < 5; h++)
{
tbody += "<tr>\
";
for (i = 0; i < cols.length; i++) {
tbody += "<td class='td col" + cols[i] + "'>" + cols[i] + "</td> \
";
}
tbody += "<\tr>\
";
}
$('#bodyCal').html(tbody);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="tblCal">
<colgroup>
<col class="col1" />
<col class="col2" />
<col class="col3" />
</colgroup>
<thead>
<tr>
<th colspan="3" class="th th2">Col 1</th>
</tr>
</thead>
<tbody id="bodyCal">
</tbody>
</table>
<button id="btnStart">Start</button>