DOM NodeList – Access and Iterate Over Collections of DOM Nodes
Introduction – Why Learn About DOM NodeList?
When working with XML or HTML documents, you’ll frequently retrieve multiple nodes using methods like getElementsByTagName, childNodes, or querySelectorAll. These methods return a NodeList—a collection-like object that lets you iterate over nodes, access by index, and traverse the document tree efficiently.
In this guide, you’ll learn:
- What a DOM NodeList is and how it works
- The difference between live and static NodeLists
- How to access, loop, and convert NodeLists
- Use cases in XML and web scripting
What Is a NodeList?
A NodeList is an ordered collection of DOM nodes, returned by certain DOM traversal and selection methods. It behaves similarly to an array, but it’s not a true array.
You can access items by index, loop through them, and use length.
How to Get a NodeList
| Method | Description | NodeList Type |
|---|---|---|
element.childNodes | All children (text, comment, element) | Live |
document.getElementsByTagName() | All elements with given tag name | Live |
document.querySelectorAll() | All elements matching CSS selector | Static |
Example – NodeList from childNodes
<book>
<title>XML Guide</title>
<author>Jane Doe</author>
</book>
JavaScript:
const book = document.getElementsByTagName("book")[0];
const children = book.childNodes;
for (let i = 0; i < children.length; i++) {
console.log(children[i].nodeName);
}
Logs: #text, title, #text, author, #text
Looping Through a NodeList
const items = document.querySelectorAll("item");
items.forEach(item => {
console.log(item.textContent);
});
If forEach() is not supported (older NodeList), use:
for (let i = 0; i < items.length; i++) {
console.log(items[i].textContent);
}
Live vs Static NodeLists
| Type | Description |
|---|---|
| Live | Automatically updates when the DOM changes (childNodes, getElementsByTagName) |
| Static | Fixed snapshot of nodes at the time of query (querySelectorAll) |
Convert NodeList to Array
const list = document.querySelectorAll("div");
const array = Array.from(list); // ES6+
// Or traditional:
const arrayAlt = [].slice.call(list);
Useful to use array methods like map, filter, reduce.
Best Practices with NodeList
- ✔️ Use
querySelectorAll()for static, CSS-style queries - ✔️ Filter
childNodeswithnodeTypeto ignore whitespace/text nodes - ✔️ Convert to array for advanced operations
- ✔️ Be cautious with live NodeLists—they update as DOM changes
- Don’t assume
.forEach()works on all NodeLists—check browser support - Avoid modifying DOM during NodeList iteration—it can desync live lists
Summary – Recap & Next Steps
NodeLists are collections of nodes returned by DOM methods, helping you iterate and access parts of your document efficiently. Mastering NodeLists is essential for XML parsing and client-side scripting.
Key Takeaways:
- NodeLists are array-like, ordered collections of DOM nodes
- They can be live or static, depending on the method used
- Convert NodeLists to arrays to use modern JavaScript methods
Real-world relevance: Used in XML DOM parsers, JavaScript frontends, AJAX, XSLT processors, and more.
FAQs – DOM NodeList
Is NodeList an array?
No. It’s array-like but lacks full array methods.
How do I know if a NodeList is live or static?
childNodes and getElementsByTagName() return live lists. querySelectorAll() returns static.
Can I use forEach() on all NodeLists?
Most modern browsers support it on static NodeLists. Convert to array if unsure.
Do NodeLists include whitespace text nodes?
Yes—especially with childNodes. Use nodeType === 1 to filter for elements.
How do I get the number of nodes?
Use nodeList.length.
Share Now :
