This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
The setNamedItem() method of the NamedNodeMap interface puts the Attr identified by its name in the map. If there is already an Attr with the same name in the map, it is replaced.
setNamedItem(attr)
attrthe attribute to insert in the map.
Returns the old attribute if replaced, or null if the attribute is new.
InUseAttributeError DOMException
Thrown if the attribute is still part of another map.
<span class="foo" id="bar"></span> <pre contenteditable></pre>
const span = document.querySelector("span");
const pre = document.querySelector("pre");
let result = `The \`<pre>\` element initially contains ${pre.attributes.length} attributes.\n\n`;
result += "We remove `class` from `<span>` and add it to `<pre>`.\n";
const classAttribute = span.attributes.removeNamedItem("class");
pre.attributes.setNamedItem(classAttribute);
result += `The \`<pre>\` element now contains ${pre.attributes.length} attributes.\n\n`;
result += "We get `id` from `<span>` and try to add it to `<pre>`.\n";
const id = span.attributes.getNamedItem("id");
try {
pre.attributes.setNamedItem(id);
} catch (error) {
result += `An exception has been raised: ${error.name}: ${error.message}.\n`;
}
pre.textContent = result;
| Specification |
|---|
| DOM> # dom-namednodemap-setnameditem> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
setNamedItem |
1 | 12 | 1 | ≤12.1 | 1 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 | 1 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap/setNamedItem