Вы можете использовать подход, аналогичный тому, который вы пытаетесь: получить innerHTML
, добавить новый html, а затем заменить innerHTML.Но вам нужно получить innerHTML
вашего table
(а не элемента, который вы вложили в него).
Например (заменил ваш button
onclick
на прослушиватель событий).
const personName = document.getElementById('personName');
const appendButton = document.getElementById('appendButton');
const nameTable = document.getElementById('nameTable');
appendButton.addEventListener('click', (event) => {
let content = nameTable.innerHTML;
content += '<tr><td>' + personName.value + '</td></tr>';
nameTable.innerHTML = content;
});
<input type="text" id="personName" autofocus>
<button type="button" id="appendButton">Append Information</button>
<table id="nameTable">
<tr>
<th>Client Name</th>
</tr>
<tr>
<td>James Bond 007</td>
</tr>
</table>
В зависимости от сложности того, что вы делаете, может быть быстрее пойти по маршруту createElement
/ appendChild
, предложенному в других ответах, если вытакже используйте use createDocumentFragment
.Другой пример:
appendButton.addEventListener('click', (event) => {
let frag = document.createDocumentFragment();
let tr = document.createElement('tr');
let td = document.createElement('td');
td.appendChild(document.createTextNode(personName.value));
tr.appendChild(td);
frag.appendChild(tr);
nameTable.appendChild(frag);
});
<input type="text" id="personName" autofocus>
<button type="button" id="appendButton">Append Information</button>
<table id="nameTable">
<tr>
<th>Client Name</th>
</tr>
<tr>
<td>James Bond 007</td>
</tr>
</table>