📋 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
childNodes
withnodeType
to 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 :