Document#

Document.createAttributeNS()#

Metoda createAttributeNS() tworzy nowy atrybut z określoną przestrzenią nazw i nazwą kwalifikowaną dla danego dokumentu.

Opis działania#

Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
var new_attr = document.createAttributeNS(namespace, qualifiedName);

gdzie poszczególne człony oznaczają:

Algorytm wywołania metody createAttributeNS(namespace, qualifiedName) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. Niech namespace, prefix oraz localName będą wynikiem przekazania namespace i qualifiedName do weryfikacji i wydobycia. Zrzuć ponownie każdy wyjątek.
  2. Zwróć nowy obiekt typu Attr, którego przestrzenią nazw jest namespace, prefiksem przestrzeni nazw jest prefix i nazwą lokalną jest localName.

Analizując dokładnie wszystkie powiązane z metodą createAttributeNS() algorytmy można zauważyć, że istnieje wiele kombinacji dla argumentów przekazywanych do metody, które najczęściej powodują zrzucenie wyjątku "NamespaceError", co jest konsekwencją niewłaściwego stosowania przestrzeni nazw.

Tuż po utworzeniu atrybutu nie będzie on skojarzony z żadnym elementem, dlatego właściwość Attr.ownerElement ma wartość null. Atrybut można przypisać do dowolnego elementu za pomocą dedykowanych metod, takich jak Element.setAttributeNode(), Element.setAttributeNodeNS(), NamedNodeMap.setNamedItem() i NamedNodeMap.setNamedItemNS(). Z drugiej jednak strony nikt nie powinien w ten sposób pracować z atrybutami, istnieją wygodniejsze polecenia wywoływane bezpośrednio na jakimś elemencie.

Obiekt zwracany przez metodę createAttributeNS() implementuje interfejs Attr, dlatego ma dostęp do wszystkich poleceń z tego interfejsu (oraz z kolejnych interfejsów w łańcuchu dziedziczenia).

Więcej szczegółów związanych z elementami, ich potencjalnymi atrybutami oraz spoiwem w postaci mapy nazwanych atrybutów umieściłem w zbiorczym dziale "Podstawy - Elementy i atrybuty".

Prosty przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html>
<html>

<head>

	<script>

		function createAttrNS(namespace, name){

			function getInfoAttr(desc, whatDoc, whatAttr){

				info.innerHTML += desc
					+ "<br>" + "Interfejs dokumentu: " + whatDoc
					+ "<br>" + "Interfejs atrybutu: " + whatAttr
					+ "<br>" + "Pierwszy argument z metody: " + namespace
					+ "<br>" + "Drugi argument z metody: " + name
					+ "<br><br>" + "Właściwość namespaceURI: " + whatAttr.namespaceURI
					+ "<br>" + "Właściwość prefix: " + whatAttr.prefix
					+ "<br>" + "Właściwość localName: " + whatAttr.localName
					+ "<br>" + "Właściwość name: " + whatAttr.name
					+ "<br>" + "Właściwość value: " + whatAttr.value
					+ "<br>" + "Właściwość nodeValue: " + whatAttr.nodeValue
					+ "<br>" + "Właściwość textContent: ";

				try{
					textContentSupport = whatAttr.textContent;
				}
				catch(e){
					textContentSupport += e;
				}

				info.innerHTML += textContentSupport
					+ "<br>" + "Właściwość ownerElement: " + whatAttr.ownerElement
					+ "<br>" + "Właściwość specified: " + whatAttr.specified + "<br><br>";

			}

			var info = document.getElementById("info");
			info.innerHTML = "";
			var textContentSupport = "IE zrzuca błąd: ";

			try{

				var newAttr1 = document.createAttributeNS(namespace, name);
				getInfoAttr("Parametry dla metody createAttribute() w dokumencie HTML:", document, newAttr1);

				var newDocXML = document.implementation.createDocument(null, null, null); // nowy dokument XML
				var newAttr2 = newDocXML.createAttributeNS(namespace, name);
				getInfoAttr("Parametry dla metody createAttribute() w dokumencie XML:", newDocXML, newAttr2);

			}
			catch(e){

				info.innerHTML = "Przekazanie do metody createAttribute() argumentu niezgodnego z wymogami XML zrzuca błąd:"
					+ "<br>" + e // opis zależny od przeglądarki
					+ "<br>" + e.constructor; // function DOMException() { [native code] }

			}

		}

	</script>

</head>

<body>
	<p>Kliknij konkretny przycisk by utworzyć nowy atrybut o określonej przestrzeni nazw i nazwie.</p>
	<input type="button" value="createAttributeNS('ns1','Test1')" onclick="createAttrNS('ns1','Test1')">
	<input type="button" value="createAttributeNS('','Test1')" onclick="createAttrNS('','Test1')">
	<input type="button" value="createAttributeNS(null,'test1')" onclick="createAttrNS(null,'test1')">
	<input type="button" value="createAttributeNS('','test1')" onclick="createAttrNS('','test1')">
	<input type="button" value="createAttributeNS('ns2','A:TEST2')" onclick="createAttrNS('ns2','A:TEST2')">
	<input type="button" value="createAttributeNS('ns2','a:test2')" onclick="createAttrNS('ns2','a:test2')">
	<input type="button" value="createAttributeNS('','0')" onclick="createAttrNS('','0')">
	<input type="button" value="createAttributeNS('','a:test3')" onclick="createAttrNS('','a:test3')">

	<p style="color: blue;">Szczegółowe informacje o nowym atrybucie:</p>
	<p id="info"></p>
</body>

</html>

Na chwilę obecną jedynie przeglądarki Firefox i Chrome obsługują metodę createAttributeNS() zgodnie z najnowszymi wymaganiami specyfikacji DOM4. IE nie udostępnia właściwości Attr.textContent w atrybutach tworzonych za pomocą metody createAttributeNS(), chociaż w przypadku innych poleceń nie ma takich problemów.

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface Document : Node {
	[NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName);
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Document (H1) Document.createAttributeNS() (H2) Opis działania (H3) Składnia Web IDL (H3) Specyfikacje i inne materiały (H3)