Ogólne#

Element#

W tym miejscu umieszczam powtarzające się specyficzne pojęcia i algorytmy w interfejsie Element.

Pojęcia#

namespace

namespace prefix

local name

Elementy są skojarzone z przestrzenią nazw # (namespace), prefiksem przestrzeni nazw # (namespace prefix) oraz nazwą lokalną # (local name). Przy tworzeniu elementu jego nazwa lokalna musi zostać podana. O ile wyraźnie nie ustalono przy tworzeniu elementu, to jego przestrzeń nazw oraz prefiks przestrzeni nazw mają wartość null.

qualified name

Nazwą kwalifikowaną # (qualified name) dla danego elementu jest jego nazwa lokalna jeśli jego prefiks przestrzeni nazw ma wartość null, w przeciwnym razie jest nią jego prefiks przestrzeni nazw, po którym następuje znak ":" (U+003A), po którym następuje jego nazwa lokalna.

W ramach pewnej optymalizacji aplikacje klienckie mogą implementować nazwę kwalifikowaną jako wewnętrzny stan elementu, ale nie jest to obowiązkowe. Specyfikacja DOM4 wprowadza dodatkowe pojęcie wyłącznie w celu poprawy czytelności.

Analogia między definicjami XML a wewnętrznymi stanami elementu używanymi przez specyfikację DOM:

attribute list

Elementy są również skojarzone z uporządkowaną listą atrybutów # (attribute list) eksponowaną poprzez obiekt typu NamedNodeMap. O ile wyraźnie nie ustalono przy tworzeniu elementu, to jego lista atrybutów jest pusta.

has

Dany element ma # (has) atrybut A jeśli A znajduje się w jego liście atrybutów.

unique identifier

Element może być skojarzony z unikatowym identyfikatorem ID # (unique identifier).

W przeszłości elementy mogły mieć wiele identyfikatorów, przykładowo wyrażanych za pomocą HTML-owego atrybutu id="" oraz DTD umieszczonych w strukturze znacznikowej. Specyfikacja DOM4 definiuje ID jako koncepcję DOM (ID a concept of the DOM) i pozwala tylko na jedną taką konstrukcję w elemencie udostępnianą przy użyciu atrybutu id (szczegóły).

classes

Element jest skojarzony z obiektem typu DOMTokenList. Sam obiekt DOMTokenList jest skojarzony z nazwą lokalną jakiegoś atrybutu w postaci "class" i jego uporządkowany zestaw słów stanowi klasy # (classes) dla skojarzonego elementu.

Zarówno w czasie tworzenia elementu, który ma dany atrybut id z wartością nie będącą pustym łańcuchem znakowym, jak również kiedy atrybut id w elemencie jest ustawiany na wartość inną niż pusty łańcuch znakowy, to należy ustawić unikatowy identyfikator ID w elemencie na tę nową wartość.

Kiedy atrybut id w elemencie jest usuwany lub jest ustawiany na pusty łańcuch znakowy, to należy usunąć unikatowy identyfikator ID tego elementu.

Zarówno w czasie tworzenia elementu, który ma dany atrybut class lub kiedy atrybut class w elemencie jest ustawiany, to należy ustawić klasy tego elementu na tę nową wartość (sparsowaną).

Kiedy atrybut class w elemencie jest usuwany, to należy ustawić klasy tego elementu na pusty zestaw.

Choć specyfikacja DOM4 definiuje przetworzeniowe wymagania dla agenta użytkownika w przypadku atrybutów id i class dowolnego elementu, to nie stawia żądań, co do prawidłowego ich stosowania.

parent element

Rodzicem elementowym # (parent element) dla danego węzła jest obiekt, który jest rodzicem typu Element. Jeśli dany węzeł posiada rodzica innego typu lub nie posiada go wcale, to wartością rodzica elementowego będzie null. Z dowolnego węzła można się odwołać do jego rodzica elementowego za pomocą właściwości Node.parentElement.

document element

Elementem dokumentowym # (document element) dla danego dokumentu jest obiekt typu Element, jeśli istnieje, którego rodzicem jest dany dokument, w przeciwnym razie wartością elementu dokumentowego będzie null. Zgodnie z wymogami dopuszczalnej zawartości dla węzła typu Document, może istnieć tylko jeden element dokumentowy, do którego można się odwołać za pomocą właściwości Document.documentElement.

root element

Specyfikacja HTML5 wprowadza ogólniejszą definicję elementowego korzenia (root element), która ma zastosowanie dla dowolnego drzewa węzłów. Każdy element dokumentowy będzie jednocześnie elementowym korzeniem, chociaż specyfikacja HTML5 dla tego osobliwego przypadku używa dłuższego zwrotu elementowy korzeń z obiektu Document.

in a document

Kiedy element lub jeden z jego przodków jest elementem dokumentowym, to znajduje się w dokumencie # (in a document). W moim kursie taki stan rzeczy nazywam po prostu drzewem dokumentu.

element interface

Interfejsem elementu # (element interface) dla dowolnej nazwy name oraz dowolnej przestrzeni nazw namespace jest interfejs Element, o ile nie zaznaczono inaczej. Przykładowo, standard HTML5 definiuje i używa dla nazwy "html" oraz przestrzeni nazw HTML interfejsu HTMLHtmlElement.

Algorytmy#

attribute is set

attribute is changed

attribute is added

attribute is removed

Obowiązujące specyfikacje włącznie ze specyfikacją DOM4 mogą używać lub używają haków w postaci atrybut jest ustawiany # (attribute is set), atrybut jest zmieniany # (attribute is changed), atrybut jest dodawany # (attribute is added) i atrybut jest usuwany # (attribute is removed), które służą do dalszego przetwarzania wartości w atrybucie.

change

Aby zmienić # (change) atrybut attribute z elementu element na wartość value należy wykonać następujące kroki:

  1. Kolejkuj zapis zmian z typem "attributes", celem element, nazwą będącą nazwą lokalną w attribute, przestrzenią nazw będącą przestrzenią nazw w attribute oraz poprzednią wartością będącą wartością w attribute.
  2. Ustaw wartość w attribute na value.
  3. Wykonaj atrybut jest ustawiany i atrybut jest zmieniany.

append

Aby dodać # (append) atrybut attribute do elementu element należy wykonać następujące kroki:

  1. Kolejkuj zapis zmian z typem "attributes", celem element, nazwą będącą nazwą lokalną w attribute, przestrzenią nazw będącą przestrzenią nazw w attribute oraz poprzednią wartością będącą wartością null.
  2. Dodaj attribute do listy atrybutów skojarzonej z element.
  3. Ustaw element w attribute na element.
  4. Wykonaj atrybut jest ustawiany i atrybut jest dodawany.

remove

Aby usunąć # (remove) atrybut attribute z elementu element należy wykonać następujące kroki:

  1. Kolejkuj zapis zmian z typem "attributes", celem element, nazwą będącą nazwą lokalną w attribute, przestrzenią nazw będącą przestrzenią nazw w attribute oraz poprzednią wartością będącą wartością w attribute.
  2. Usuń attribute z listy atrybutów skojarzonej z element.
  3. Ustaw element w attribute na wartość null.
  4. Wykonaj atrybut jest usuwany.

replace

Aby zastąpić # (replace) stary atrybut oldAttr nowym atrybutem newAttr w elemencie element należy wykonać następujące kroki:

  1. Kolejkuj zapis zmian z typem "attributes", celem element, nazwą będącą nazwą lokalną w attribute, przestrzenią nazw będącą przestrzenią nazw w attribute oraz poprzednią wartością będącą wartością w attribute.
  2. Zastąp oldAttr przez newAttr w liście atrybutów skojarzonej z element.
  3. Ustaw element w oldAttr na wartość null.
  4. Ustaw element w newAttr na element.
  5. Wykonaj atrybut jest ustawiany i atrybut jest zmieniany.

get an attribute by name

Aby pobrać atrybut poprzez nazwę # (get an attribute by name) z przekazaniem nazwy kwalifikowanej qualifiedName i elementu element należy wykonać następujące kroki:

  1. Jeśli element znajduje się w przestrzeni nazw HTML oraz jego właścicielem jest dokument HTML, to niech qualifiedName zostanie przekonwertowana na małe znaki ASCII.
  2. Zwróć pierwszy atrybut z listy atrybutów skojarzonej z element, którego nazwą kwalifikowaną jest qualifiedName, jeśli takowy istnieje, w przeciwnym razie zwróć wartość null.

get an attribute by namespace and local name

Aby pobrać atrybut poprzez przestrzeń nazw i nazwę lokalną # (get an attribute by namespace and local name) z przekazaniem przestrzeni nazw namespace, nazwy lokalnej localName i elementu element należy wykonać następujące kroki:

  1. Jeśli namespace jest pustym łańcuchem znakowym, to ustaw ją na wartość null.
  2. Zwróć atrybut z listy atrybutów skojarzonej z element, którego przestrzenią nazw jest namespace i którego nazwą lokalną jest localName, jeśli takowy istnieje, w przeciwnym razie zwróć wartość null.

get an attribute value

Aby pobrać wartość atrybutu # (get an attribute value) z przekazaniem elementu element, nazwy lokalnej localName i opcjonalnej przestrzeni nazw namespace należy wykonać następujące kroki:

  1. Jeśli namespace nie została przekazana, to ustaw ją na wartość null.
  2. Niech attr będzie wynikiem pobrania atrybutu poprzez przestrzeń nazw i nazwę lokalną z przekazaniem namespace, localName i element.
  3. Jeśli attr jest wartością null, to zwróć pusty łańcuch znakowy.
  4. Zwróć wartość z attr.

set an attribute

Aby ustawić atrybut # (set an attribute) z przekazaniem atrybutu attr oraz elementu element należy wykonać następujące kroki:

  1. Jeśli element w attr nie jest wartością null ani przekazanym element, to zrzuć wyjątek "InUseAttributeError".
  2. Niech oldAttr będzie wynikiem pobrania atrybutu poprzez przestrzeń nazw i nazwę lokalną z przekazaniem przestrzeni nazw w attr, nazwy lokalnej w attr i element.
  3. Jeśli oldAttr jest równe attr, to zwróć attr.
  4. Jeśli oldAttr nie jest wartością null, to zastąp oldAttr przez attr w element.
  5. W przeciwnym razie dodaj attr do element.
  6. Zwróć oldAttr.

set an attribute value

Aby ustawić wartość atrybut # (set an attribute value) dla elementu element z przekazaniem nazwy lokalnej localName i wartości value, z opcjonalnym prefiksem przestrzeni nazw prefix oraz przestrzenią nazw namespace, należy wykonać następujące kroki:

  1. Jeśli prefix nie został przekazany, to ustaw go na wartość null.
  2. Jeśli namespace nie została przekazana, to ustaw ją na wartość null.
  3. Niech attribute będzie wynikiem pobrania atrybutu poprzez przestrzeń nazw i nazwę lokalną z przekazaniem namespace, localName i element.
  4. Jeśli attribute ma wartość null, to utwórz atrybut z przestrzenią nazw namespace, prefiksem przestrzeni nazw prefix, nazwą lokalną localName oraz wartością value, a następnie dodaj ten atrybut do element i pomiń kolejne kroki.
  5. Zmień attribute z element na value.

remove an attribute by name

Aby usunąć atrybut poprzez nazwę # (remove an attribute by name) z przekazaniem nazwy kwalifikowanej qualifiedName i elementu element należy wykonać następujące kroki:

  1. Niech attr będzie wynikiem pobrania atrybutu poprzez nazwę z przekazaniem qualifiedName i element.
  2. Jeśli attr nie jest wartością null, to usuń go z element.
  3. Zwróć attr.

remove an attribute by namespace and local name

Aby usunąć atrybut poprzez przestrzeń nazw i nazwę lokalną # (remove an attribute by namespace and local name) z przekazaniem przestrzeni nazw namespace, nazwy lokalnej localName i elementu element należy wykonać następujące kroki:

  1. Niech attr będzie wynikiem pobrania atrybutu poprzez przestrzeń nazw i nazwę lokalną z przekazaniem namespace, localName i element.
  2. Jeśli attr nie jest wartością null, to usuń go z element.
  3. Zwróć attr.

match a selectors string

Aby dopasować łańcuch znakowy selektorów # (match a selectors string) selectors na zestawie set należy wykonać następujące kroki:

  1. Niech s będzie wynikiem parsowania selektora selectors z użyciem zestawu elementów referencyjnych set.
  2. Jeśli s jest błędem to zrzuć wyjątek "SyntaxError".
  3. Zwróć wynik dopasowania selektora s z użyciem zestawu elementów referencyjnych set.

reflect

Niektóre właściwości (atrybuty IDL) są definiowane w celu odzwierciedlenia # (reflect) zawartości atrybutu z przekazaniem nazwy lokalnej name. Oznacza to, że przy pobieraniu (getting) oraz ustawianiu (setting) należy wykonać następujące czynności:

Odczytanie wartości atrybutu:

Zmiana wartości atrybutu:

Więcej szczegółów związanych z techniką odzwierciedlania zawartości atrybutu umieściłem w dziale "Podstawy - Elementy i atrybuty".

insert adjacent

Aby wstawić sąsiada # (insert adjacent) z przekazaniem elementu element, łańcucha znakowego where i węzła node należy, w zależności od pierwszego dopasowania pod względem nieczułości na wielkość znaków ASCII do where, wykonać następujące kroki:

"beforebegin"
  1. Jeśli rodzicem w element jest wartość null, to zwróć wartość null.
  2. Zwróć wynik przed wstawienia node do rodzica w element przed element. Zrzuć ponownie każdy wyjątek.
"afterbegin"
  1. Zwróć wynik przed wstawienia node do element przed pierwszym dzieckiem w element. Zrzuć ponownie każdy wyjątek.
"beforeend"
  1. Zwróć wynik przed wstawienia node do element przed null. Zrzuć ponownie każdy wyjątek.
"afterend"
  1. Jeśli rodzicem w element jest wartość null, to zwróć wartość null.
  2. Zwróć wynik przed wstawienia node do rodzica w element przed bratem następującym w element. Zrzuć ponownie każdy wyjątek.
W przeciwnym razie

Zrzuć wyjątek "SyntaxError".

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Ogólne (H1) Element (H2) Pojęcia (H3) namespace (H4) namespace prefix (H4) local name (H4) qualified name (H4) attribute list (H4) has (H4) unique identifier (H4) classes (H4) parent element (H4) document element (H4) root element (H4) in a document (H4) element interface (H4) Algorytmy (H3) attribute is set (H4) attribute is changed (H4) attribute is added (H4) attribute is removed (H4) change (H4) append (H4) remove (H4) replace (H4) get an attribute by name (H4) get an attribute by namespace and local name (H4) get an attribute value (H4) set an attribute (H4) set an attribute value (H4) remove an attribute by name (H4) remove an attribute by namespace and local name (H4) match a selectors string (H4) reflect (H4) insert adjacent (H4)