Я делаю компонент реакции для выбора и отмены выбора тегов. Для этого нужно, чтобы теги отображались в таблице с флажком рядом с ними. Моя проблема в том, что я не могу установить текстовую часть при создании их с помощью javaScript. Ни через innerHTML, ни через innerText. Он отображается в инспекторе, но не в моем браузере (Chromium).
Пока мой метод выглядит так:
generateTagTable() {
let tbl = document.getElementById('tagTable')
tbl.className = 'tagTable'
let tbdy = document.createElement('tbody')
for (let i = 0; i < this.allTags.length; i++) {
let tr = document.createElement('tr')
let td = document.createElement('td')
let div = document.createElement('div')
let cb = document.createElement('input')
div.className = 'checkContainer'
cb.id = 'checkTd'
cb.type = 'checkbox'
cb.innerText = 'Tag'
div.appendChild(cb)
td.appendChild(div)
tr.appendChild(td)
tbdy.appendChild(tr)
}
tbl.appendChild(tbdy)
}
Что приводит к следующему:
Я знаю, что могу достичь своей цели, сделав следующее:
generateTagTable() {
let tbl = document.getElementById('tagTable')
tbl.className = 'tagTable'
let tbdy = document.createElement('tbody')
for (let i = 0; i < this.allTags.length; i++) {
let tr = document.createElement('tr')
let td = document.createElement('td')
td.className = 'checkContainer'
td.innerHTML = '<div class = "flexcenter"><input type = "checkbox" name = "tagCheck"/>' + this.allTags[i] + '</div>'
tr.appendChild(td)
tbdy.appendChild(tr)
}
tbl.appendChild(tbdy)
}
Но это оставляет у меня проблему при попытке назначить onclick и, как правило, оставляет мне меньше контроля, как я чувствую.
Результат рабочего таков, и я пытаюсь достичь этого:



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Флажки (элементы input в целом) не имеют содержимого (они пустые элементы), поэтому innerText, textContent и innerHTML не имеют по отношению к ним никакой функции.
Если вы хотите, чтобы текст рядом с вашим флажком, обычно оборачивают его вокруг label. В разметке это будет:
<label>
<input type = "checkbox">
Text
</label>
Корректируя свой код, вы можете:
// ...
let td = document.createElement('td')
let div = document.createElement('div')
let label = document.createElement('label') // *** (added)
label.innerText = 'Tag' // *** (moved and modified)
let cb = document.createElement('input')
div.className = 'checkContainer'
cb.id = 'checkTd'
cb.type = 'checkbox'
label.insertBefore(cb, label.firstChild); // *** (added)
div.appendChild(label) // *** (modified)
// ...
Тем не менее, было бы намного проще использовать разметку (tr.innerHTML = ...), а браузеры используют разметку синтаксического анализа очень быстро.
// ...
let tr = document.createElement('tr')
tr.innerHTML = `
<td>
<div class = "checkContainer">
<label>
<input type = "checkbox" id = "checkTd">
Tag
</label>
</div>
</td>`;
tbdy.appendChild(tr)
// ...
Боковое примечание: в его нынешнем виде ваш код создает несколько элементов input с одним и тем же id (checkTd). Это неверно, только элемент один в документе может иметь этот id. В зависимости от того, что вы делаете, вам может вообще не понадобиться id, или вам может потребоваться добавить к нему суффикс (возможно, используя i), чтобы сделать его уникальным.