Element#

Element.removeAttributeNode()#

Metoda removeAttributeNode() usuwa przekazany atrybut w danym elemencie 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:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
var return_attr = element.removeAttributeNode(attr);

gdzie poszczególne człony oznaczają:

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

  1. Jeśli attr nie znajduje się w liście atrybutów skojarzonej z obiektem kontekstu, to zrzuć wyjątek "NotFoundError".
  2. Usuń attr z obiektu kontekstu.
  3. Zwróć attr.

Analizując dokładnie wszystkie powiązane z metodą removeAttributeNode() algorytmy można dojść do następujących wniosków:

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>

		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 createAndRemove(namespace, name, variant){

			try{

				var new_attr;

				if (variant == 2){
					new_attr = document.createAttributeNS(namespace, name);
				}
				else if (variant == 1){
					new_attr = info.attributes[0];
				}
				else if (variant == 0){
					new_attr = allAttr[0];
				}

				var return_attr = p.removeAttributeNode(new_attr);

				info.innerHTML = "Interfejs mapy nazwanych atrybutów: " + allAttr // [object NamedNodeMap]
						+ "<br>" + "Właściwość length: " + allAttr.length
						+ "<br><br>" + "Interfejs przekazanego atrybutu: " + new_attr
						+ "<br>" + "Właściwość namespaceURI: " + new_attr.namespaceURI
						+ "<br>" + "Właściwość prefix: " + new_attr.prefix
						+ "<br>" + "Właściwość localName: " + new_attr.localName
						+ "<br>" + "Właściwość name: " + new_attr.name
						+ "<br>" + "Właściwość value: " + new_attr.value
						+ "<br>" + "Właściwość ownerElement: " + new_attr.ownerElement;

				if (return_attr){

					info.innerHTML += "<br><br>" + "Interfejs zwróconego atrybutu: " + return_attr
							+ "<br>" + "Właściwość namespaceURI: " + return_attr.namespaceURI
							+ "<br>" + "Właściwość prefix: " + return_attr.prefix
							+ "<br>" + "Właściwość localName: " + return_attr.localName
							+ "<br>" + "Właściwość name: " + return_attr.name
							+ "<br>" + "Właściwość value: " + return_attr.value
							+ "<br>" + "Właściwość ownerElement: " + return_attr.ownerElement
							+ "<br><br>" + "Przekazany atrybut == Zwrócony atrybut: " + (new_attr == return_attr);

				}

				else{

					info.innerHTML += "<br><br>" + "Atrybutu nie było w elemencie i metoda zwróciła: " + return_attr;

				}

			}

			catch(e){

				info.innerHTML = "Wyjątek: " + e;

			}

		}

	</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ąć określony atrybut w akapicie.</p>
	<input type="button" value="removeAttributeNode(attr[0] z p)" onclick="createAndRemove('','',0)">
	<input type="button" value="removeAttributeNode(attr z innego p)" onclick="createAndRemove('','',1)">
	<input type="button" value="removeAttributeNode(attr['','id'])" onclick="createAndRemove('','id',2)">
	<input type="button" value="removeAttributeNode(attr['ns1','id'])" onclick="createAndRemove('ns1','id',2)">
	<input type="button" value="removeAttributeNode(attr['ns2','ID'])" onclick="createAndRemove('ns2','ID',2)">
	<input type="button" value="removeAttributeNode(null)" onclick="createAndRemove(null)">
	<p style="color: blue;">Szczegółowe informacje dla usuniętych atrybutów:</p>
	<p id="info"></p>
</body>

</html>

Na chwilę obecną jedynie przeglądarki Firefox i Chrome obsługują metodę removeAttributeNode() zgodnie z najnowszymi wymaganiami specyfikacji DOM4. IE wiele aspektów związanych z atrybutami obsługuje błędnie.

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface Element : Node {
	Attr removeAttributeNode(Attr attr);
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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