# JS Quiz: Hard: Node list snapshot vs live collection

**URL:** <https://forum.kirupa.com/t/js-quiz-hard-node-list-snapshot-vs-live-collection/682358>\
**Category:** web dev\
**Created:** [June 30, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-node-list-snapshot-vs-live-collection/682358 "2026-06-30T07:00:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![sarah\_connor](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/sarah_connor/32/31258_2.png) [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Post date:** [June 30, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-node-list-snapshot-vs-live-collection/682358/1 "2026-06-30T07:00:08Z")

</div>

Assuming this runs in a browser, what logs?

```js
const ul = document.createElement('ul');
ul.innerHTML = '<li>A</li><li>B</li>';
document.body.appendChild(ul);

const staticList = ul.querySelectorAll('li');
const liveList = ul.getElementsByTagName('li');

const li = document.createElement('li');
li.textContent = 'C';
ul.appendChild(li);

console.log(staticList.length, liveList.length);

```

_Poll ([view on site](https://forum.kirupa.com/t/js-quiz-hard-node-list-snapshot-vs-live-collection/682358/1))_

---

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [July 1, 2026, 7:20am UTC](https://forum.kirupa.com/t/js-quiz-hard-node-list-snapshot-vs-live-collection/682358/2 "2026-07-01T07:20:29Z")

</div>

It logs `2 3`.

`querySelectorAll('li')` is a snapshot-y NodeList, so it stays stuck at 2 even after you append `C`. `getElementsByTagName('li')` hands you a live HTMLCollection, so it updates under your feet and reports 3 (which is why looping it while mutating the DOM can get real weird).

---

<div class="post-metadata">

**Author:** ![sarah\_connor](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/sarah_connor/32/31258_2.png) [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Post date:** [July 8, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-node-list-snapshot-vs-live-collection/682358/3 "2026-07-08T07:00:06Z")

</div>

JS Quiz answer: Option 3 (C).

Correct choice: 2 3

Why:  
querySelectorAll gives a static snapshot, while getElementsByTagName is live.

Go deeper:

[https://www.kirupa.com/html5/ai/advanced\_random\_numbers\_js.md](https://www.kirupa.com/html5/ai/advanced_random_numbers_js.md)

Sarah 😀
