NamedNodeMap#
NamedNodeMap.removeNamedItem()#
Metoda removeNamedItem()
usuwa pierwszy atrybut o określonej nazwie kwalifikowanej z listy atrybutów skojarzonej z daną mapą nazwanych atrybutów i zwraca referencję do usuniętego atrybutu.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var attr = namedNodeMap.removeNamedItem(qualifiedName);
gdzie poszczególne człony oznaczają:
- attr - referencja do usuniętego atrybutu z listy atrybutów.
- namedNodeMap - mapa nazwanych atrybutów będąca obiektem kontekstu.
- qualifiedName - łańcuch znakowy reprezentujący nazwę kwalifikowaną usuwanego atrybutu z listy atrybutów.
Algorytm wywołania metody removeNamedItem(qualifiedName)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Niech attr będzie wynikiem usuwania atrybutu poprzez nazwę z przekazaniem qualifiedName i elementu skojarzonego z obiektem kontekstu.
- Jeśli attr jest wartością
null
, to zrzuć wyjątek"NotFoundError"
. - Zwróć attr.
Alternatywnie można skorzystać z podobnie działającej metody Element.removeAttribute()
. Trzeba jedynie pamiętać o braku zrzucenia przez nią błędu oraz o braku zwracania referencji do usuniętego atrybutu.
Prosty przykład:
<!DOCTYPE html>
<html>
<head>
<script>
window.onload = function(){
p = document.getElementsByTagName("p")[0]; // referencja do akapitu
p.setAttributeNS("www.test1.com", "ID", "Test1");
p.setAttributeNS("www.test2.com", "Class", "Test2");
p.setAttribute("id", "Identyfikator");
p.className = "Klasa1 Klasa2 Klasa3";
p.setAttributeNS("www.test3.com", "A:NEW", "Test3");
p.setAttributeNS("www.test4.com", "a:new", "Test4");
allAttr = p.attributes;
var info = document.getElementById("info");
}
function removeNamedItem(name){
try{
var attr = allAttr.removeNamedItem(name); // atrybut o określonej nazwie
info.innerHTML = "Interfejs mapy nazwanych atrybutów: " + allAttr // [object NamedNodeMap]
+ "<br>" + "Właściwość length: " + allAttr.length
+ "<br><br>" + "Interfejs atrybutu: " + attr
+ "<br>" + "Argument z metody: " + name
+ "<br>" + "Właściwość namespaceURI: " + attr.namespaceURI
+ "<br>" + "Właściwość prefix: " + attr.prefix
+ "<br>" + "Właściwość localName: " + attr.localName
+ "<br>" + "Właściwość name: " + attr.name
+ "<br>" + "Właściwość value: " + attr.value;
}
catch(e){
info.innerHTML = "Wyjątek: " + e
+ "<br>" + "Argument z metody: " + name;
}
}
</script>
</head>
<body>
<p>Akapit z atrybutami ustawianymi z poziomu skryptu:</p>
<ul>
<li>p.setAttributeNS("www.test1.com", "ID", "Test1");</li>
<li>p.setAttributeNS("www.test2.com", "Class", "Test2");</li>
<li>p.setAttribute("id", "Identyfikator");</li>
<li>p.className = "Klasa1 Klasa2 Klasa3";</li>
<li>p.setAttributeNS("www.test3.com", "A:NEW", "Test3");</li>
<li>p.setAttributeNS("www.test4.com", "a:new", "Test4");</li>
</ul>
<p>Kliknij przycisk by usunąć atrybut o określonej nazwie z listy atrybutów akapitu.</p>
<input type="button" value="removeNamedItem('ID')" onclick="removeNamedItem('ID')">
<input type="button" value="removeNamedItem('id')" onclick="removeNamedItem('id')">
<input type="button" value="removeNamedItem('Class')" onclick="removeNamedItem('Class')">
<input type="button" value="removeNamedItem('class')" onclick="removeNamedItem('class')">
<input type="button" value="removeNamedItem('A:NEW')" onclick="removeNamedItem('A:NEW')">
<input type="button" value="removeNamedItem('a:new')" onclick="removeNamedItem('a:new')">
<input type="button" value="removeNamedItem('brak')" onclick="removeNamedItem('brak')">
<p style="color: blue;">Szczegółowe informacje dla usuniętych atrybutów:</p>
<p id="info"></p>
</body>
</html>
Na chwilę obecną jedynie przeglądarka Firefox obsługuje metodę removeNamedItem()
zgodnie z najnowszymi wymaganiami specyfikacji DOM4. Chrome niewłaściwie obsługuje algorytm pobrania atrybutu poprzez nazwę (krok pierwszy), ponieważ dla elementów z przestrzenią nazw HTML i z właścicielem będącym dokumentem HTML nie zamienia przekazanej nazwy kwalifikowanej do metody na małe litery. IE wiele aspektów związanych z atrybutami obsługuje błędnie.
Składnia Web IDL#
[LegacyUnenumerableNamedProperties] interface NamedNodeMap { Attr removeNamedItem(DOMString qualifiedName); }