🗂️ DOM NamedNodeMap – Access Attributes and Named Nodes in the DOM
🧲 Introduction – Why Learn DOM NamedNodeMap?
When dealing with element attributes or named collections of nodes in XML/HTML, the DOM uses a special object called NamedNodeMap. It provides a map-like interface to access attributes by name, enabling you to retrieve, add, remove, or iterate through them.
🎯 In this guide, you’ll learn:
- What
NamedNodeMapis and where it’s used - How to access and manipulate element attributes
- Key methods and properties of
NamedNodeMap - Differences from arrays and
Mapobjects
📘 What Is a NamedNodeMap?
A NamedNodeMap is a collection of attribute nodes associated with a DOM Element. It behaves like a map, where keys are attribute names, but it is not a true JavaScript Map or array.
🧩 You most often encounter NamedNodeMap as element.attributes.
🧾 Example – Access Attributes via NamedNodeMap
HTML/XML:
<book id="b001" category="fiction" language="en"/>
JavaScript:
const book = document.getElementsByTagName("book")[0];
const attrs = book.attributes;
console.log(attrs.length); // 3
console.log(attrs[0].name); // "id"
console.log(attrs.getNamedItem("category").value); // "fiction"
📋 NamedNodeMap vs Object/Array
| Feature | NamedNodeMap | Array / Object |
|---|---|---|
| Indexed access | ✅ Yes ([0], [1]) | ✅ Yes |
| Named access | ✅ Yes (getNamedItem) | ✅ (object key access) |
Iterable with for | ✅ (loop by index) | ✅ (array/Object entries) |
| Map-like methods | ❌ Not fully supported | ❌ Not standard |
| Real array? | ❌ No | ✅ (Array) / ✅ (Object) |
🔧 Key Properties & Methods
| Property / Method | Description |
|---|---|
length | Number of attributes/nodes in the map |
item(index) | Returns node at given index |
getNamedItem(name) | Returns node with given name |
setNamedItem(attrNode) | Adds or replaces node |
removeNamedItem(name) | Removes node with given name |
🔁 Iterating Through NamedNodeMap
const attrs = element.attributes;
for (let i = 0; i < attrs.length; i++) {
const attr = attrs[i];
console.log(`${attr.name} = ${attr.value}`);
}
✅ Useful for dynamically reading all attributes of an element.
🧠 Real-World Use Cases
- 📖 Parsing XML metadata
- 🛠️ Dynamically applying data attributes
- 🧪 Validating required fields on form elements
- 🌐 Reading
lang,dir,data-*attributes on page elements
✅ Best Practices with NamedNodeMap
- ✔️ Use
.attributesto get all attributes of an element - ✔️ Use
getNamedItem()to safely read specific attribute nodes - ✔️ Use
removeNamedItem()only when you’re sure the node exists - ❌ Don’t assume the attributes appear in a specific order
- ❌ Don’t treat
NamedNodeMapas a real array—use indexed access only
📌 Summary – Recap & Next Steps
NamedNodeMap is the DOM representation of element attributes, offering both indexed and named access. While not as flexible as JavaScript Maps or arrays, it’s essential when parsing or manipulating XML/HTML attributes dynamically.
🔍 Key Takeaways:
NamedNodeMapis accessed viaelement.attributes- You can use both index and attribute name to access nodes
- Use
getNamedItem(),item(), andremoveNamedItem()for safe operations
⚙️ Real-world relevance: Found in XML parsers, dynamic HTML manipulation, form validation, and custom attribute frameworks.
❓ FAQs – DOM NamedNodeMap
❓ Is NamedNodeMap a real JavaScript Map?
❌ No. It’s a DOM-specific structure that behaves like a map but lacks Map methods.
❓ How do I convert NamedNodeMap to an array?
✅ Use Array.from(element.attributes) or loop manually.
❓ Can I directly modify the value in NamedNodeMap?
✅ Yes. Access the node and assign a new value.
❓ What happens if I try to get a non-existent attribute?
✅ getNamedItem() returns null.
❓ Is the order of attributes guaranteed in NamedNodeMap?
❌ No. Attribute order is not guaranteed by the DOM spec.
Share Now :
