A NodeList
может быть статической или «живой» коллекцией узлов.
В некоторых случаях NodeList является живым, что означает, что изменения в DOM автоматически обновляют коллекцию.
например, Node.childNodes
В других случаях NodeList является статическим, когда любые изменения в DOM не влияют на содержимое коллекции.
например, список, возвращаемый querySelectorAll()
Источник: https://developer.mozilla.org/en-US/docs/Web/API/NodeList
Как вы можете видеть в этом примере, я однажды установил ссылку на childNodes
,Он обновляется, как только меняется DOM.
const list = document.querySelector('#main');
const items = list.childNodes;
setInterval(() => {
const item = document.createElement('li');
item.innerHTML = '?';
list.appendChild(item);
console.log(items.length);
}, 500);
<ul id="main"></ul>
getElementsByClassName
также возвращает живую коллекцию узлов:
const list = document.querySelector('#main');
const spans = list.getElementsByClassName('burrito');
setInterval(() => {
const item = document.createElement('li');
item.innerHTML = '<li><span class="burrito">?</span></li>';
list.appendChild(item);
console.log(spans.length);
}, 1);
<ul id="main">
</ul>