document.getElementsByClassName('thisYear')[0] = yyyy;
пытается установить элемент DOM, возвращаемый из вызова в год, а не какое-либо свойство элемента DOM в год.
Чтобы ваш код работал, «быстрое исправление»чтобы добавить .innerHTML
к вашей строке:
document.getElementsByClassName('thisYear')[0].innerHTML = yyyy;
Однако .getElementsByClassName()
(наряду с аналогичными API 1990-х годов, такими как getElementsByTagName()
, getElementsByName()
и другими) больше не должно бытьиспользуемый. Я писал об этом и о идее добавления индекса в конец метода, который возвращает список узлов здесь .
Вместо этого используйте современный, соответствующий стандартам.querySelector()
и .querySelectorAll()
, а затем вам нужно будет перебрать коллекцию и изменить элементы по отдельности.
См. Дополнительные комментарии:
//get year
var yyyy = new Date().getFullYear();
// .querySelectorAll returns a node list, which is not an actual Array implementation.
// IE doesn't support calling .forEach on node lists, so if you need to support IE
// you'll need to convert the node list into an aray in order to call .forEach and you'll
// need to do it in a way that IE understands (not Array.from()):
// Array.prototype.slice.call(document.querySelectorAll('.thisYear')).forEach(function(element) {
// But, if you are not concerned with IE, you can call .forEach() directly on the node list
document.querySelectorAll('.thisYear').forEach(function(element) {
// When the content you wish to update doesn't contain any HTML, don't use .innerHTML
// which has performance and potential security implications, use .textContent instead
element.textContent = yyyy;
});
div { margin-bottom:1em; }
<div class="thisYear">this year</div>
<div class="thisYear">this year</div>
<div class="notThisYear"> not this year</div>
<div class="notThisYear">not this year</div>
<div class="thisYear"></div>