🗂️ 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
NamedNodeMap
is and where it’s used - How to access and manipulate element attributes
- Key methods and properties of
NamedNodeMap
- Differences from arrays and
Map
objects
📘 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
.attributes
to 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
NamedNodeMap
as 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:
NamedNodeMap
is 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 :