использовать button.innerHTML
не buttons.innerHTML
Массив называется buttons
- каждый извлекаемый элемент инициализируется как button
. Вы хотите установить div равным элементу innerHTML этого элемента, а не массиву buttons
, который, как и массив для начала, не имеет свойства innerHTML
. Кроме того, в вашем вопросе было непонятно, но если вы хотите продолжать добавлять цифры в окно калькулятора, обязательно используйте оператор +=
вместо =
, например, document.querySelector('#nums').textContent += button.innerHTML
Таким образом, это будет продолжайте добавлять к каждому полю при нажатии кнопки.
Если вы хотите, чтобы кнопки просто заменяли предыдущий элемент в окне калькулятора, это будет работать:
buttons.forEach(button => {
button.addEventListener('click', function(){
document.querySelector('#nums').textContent = button.innerHTML
})
})
РЕДАКТИРОВАТЬ: На самом деле, поскольку вы просто хотите, чтобы текстовый узел в вашем HTML, было бы лучше для производительности просто использовать button.textContent
или, как указал @Barmar, this.textContent
(this
также ссылки button
)
textContent
быстрее, потому что когда вы используете innerHTML
, браузер должен перерабатывать и анализировать все, пока копирует. textContent
конкретно касается только текстового узла и содержимого в нем.
buttons.forEach(button => {
button.addEventListener('click', function(){
document.querySelector('#nums').textContent = button.textContent;
})
})