Ogólne#
Nodes#
W tym miejscu umieszczam powtarzające się specyficzne pojęcia i algorytmy w dziale NODES, czyli mogą mieć one zastosowanie dla wszystkich interfejsów z tego działu.
Pojęcia#
node document
Każdy węzeł jest skojarzony z właścicielem # (node document), którym jest dokument (np. węzeł typu Document lub inny dziedziczący po nim), i który jest ustawiany automatycznie w czasie tworzenia tego węzła. Z dowolnego węzła można pobrać jego właściciela za pomocą właściwości Node.ownerDocument, pamiętając jednocześnie o tym, że dla dokumentów zwracana będzie wartość null.
Właściciel dla danego węzła może zostać zmieniony już po jego utworzeniu. Odbywa się to wyłącznie za pośrednictwem algorytmu adoptującego wykorzystywanego w niektórych metodach, np. Document.adoptNode(), Node.appendChild(), Node.insertBefore() czy Node.replaceChild().
length
Długość # (length) w węźle node zależy od jego typu:
- Dla węzła typu
DocumentTypewynosi zero. - Dla węzła typu
Text,ProcessingInstructioniCommentjest równa wartości atrybutulength. - Dla pozostałych węzłów jest równa liczbie ich dzieci.
empty
Węzeł jest uznawany za pusty # (empty) jeśli jego długość wynosi zero.
Algorytmy#
adopting steps
Obowiązujące specyfikacje mogą definiować dodatkowe kroki adoptowania # (adopting steps) dla wszystkich lub poszczególnych węzłów. Do algorytmu przekazywane są argumenty node i oldDocument, jak w poniższym algorytmie adoptowania.
adopt
Aby adoptować # (adopt) węzeł node do dokumentu document należy wykonać następujące kroki:
- Niech oldDocument będzie właścicielem w node.
- Jeśli rodzic w node nie ma wartości
null, to usuń node z jego rodzica. Jeśli document nie jest taki sam jak oldDocument, to wykonaj poniższe podkroki:
- Dla każdego (for each) potomka obejmującego descendant z potomków obejmujących w node, zgodnie z porządkiem drzewa, ustaw właściciela w descendant na document.
- Dla każdego (for each) potomka obejmującego descendant z potomków obejmujących w node, zgodnie z porządkiem drzewa, uruchom dodatkowe kroki adoptowania z przekazaniem descendant i oldDocument.
adopt
Obowiązujące specyfikacje mogą definiować dodatkowe kroki klonowania # (cloning steps) dla wszystkich lub poszczególnych węzłów. Do algorytmu przekazywane są argumenty copy, node, document i opcjonalnie clone children flag, jak w poniższym algorytmie klonowania.
Specyfikacja HTML5 określa dodatkowe kroki klonowania dla skryptów oraz pól wejściowych formularza. SVG powinien robić to samo dla swoich elementów skryptowych, ale w tym momencie tego nie czyni.
clone
Aby sklonować # (clone) węzeł node, z opcjonalnym dokumentem document i flagą klonowania dzieci clone children flag, należy wykonać następujące kroki:
- Jeśli document nie został przekazany, to niech document wskazuje na właściciela w node.
Niech copy będzie nowym węzłem implementującym ten sam interfejs jak w node, i w zależności od node, wykonaj poniższe podkroki:
- Dla węzła typu
Document - Ustaw kodowanie, typ zawartości, adres URL, typ oraz tryb w copy na te same wartości, co w node.
- Dla węzła typu
DocumentType - Ustaw nazwę, identyfikator publiczny oraz identyfikator systemowy w copy na te same wartości, co w node.
- Dla węzła typu
Element - Ustaw przestrzeń nazw, prefiks przestrzeni nazw oraz nazwę lokalną w copy na te same wartości, co w node.
Dla każdego (for each) atrybutu attribute w liście atrybutów skojarzonej z node, zgodnie z kolejnością, wykonaj poniższe wewnętrzne podkroki:
- Niech copyAttribute będzie nowym obiektem typu
Attr. - Ustaw przestrzeń nazw, prefiks przestrzeni nazw, nazwę lokalną oraz wartość w copyAttribute na te same wartości, co w attribute.
- Dodaj copyAttribute do listy atrybutów skojarzonej z copy.
- Niech copyAttribute będzie nowym obiektem typu
- Dla węzła typu
TextiComment - Ustaw dane tekstowe w copy na te same wartości, co w node.
- Dla węzła typu
ProcessingInstruction - Ustaw cel oraz dane tekstowe w copy na te same wartości, co w node.
- Dla pozostałych węzłów
- Niczego nie rób.
- Dla węzła typu
- Jeśli copy jest węzłem typu
Document, to ustaw właściciela w copy oraz document na copy, w przeciwnym razie ustaw właściciela w copy na document. - Uruchom wszystkie dodatkowe kroki klonowania dla node zdefiniowane w innych obowiązujących specyfikacjach, z przekazaniem copy, node, document i clone children flag (jeśli ustawiona).
- Jeśli clone children flag jest ustawiona, to klonuj wszystkie dzieci w node i dołącz je do copy, z przekazaniem document i clone children flag.
- Zwróć copy.
equals
Węzeł A jest zgodny # (equals) z węzłem B jeśli wszystkie poniższe warunki są prawdziwe:
- Wartość atrybutu
nodeTypew A i B jest taka sama. - Poniższe, w zależności od A, są również zgodne:
- Dla węzła typu
DocumentTypesprawdzaj nazwę, identyfikator publiczny oraz identyfikator systemowy. - Dla węzła typu
Elementsprawdzaj przestrzeń nazw, prefiks przestrzeni nazw, nazwę lokalną oraz liczbę jego atrybutów w skojarzonej liście atrybutów. - Dla węzła typu
ProcessingInstructionsprawdzaj cel oraz dane tekstowe. - Dla węzła typu
TextiCommentsprawdzaj dane tekstowe. - Dla pozostałych węzłów niczego nie rób.
- Dla węzła typu
- Jeśli A jest węzłem typu
Element, to każdy jego atrybut w skojarzonej liście atrybutów ma odpowiadający atrybut w liście atrybutów skojarzonej z B, z tą samą przestrzenią nazw, prefiksem przestrzeni nazw, nazwą lokalną i wartością. - Zarówno A i B mają identyczną liczbę dzieci.
- Każde dziecko w A jest zgodne z dzieckiem w B o tym samym indeksie.
locate a namespace prefix
Aby zlokalizować prefiks przestrzeni nazw # (locate a namespace prefix) dla elementu element przy pomocy przestrzeni nazw namespace należy wykonać następujące kroki:
- Jeśli przestrzenią nazw w element jest namespace i jego prefiks przestrzeni nazw nie ma wartości
null, to zwróć jego prefiks przestrzeni nazw. - Jeśli element posiada jakiś atrybut, którego prefiks przestrzeni nazw ma wartość "
xmlns" i jego wartością jest namespace, to zwróć nazwę lokalną pierwszego takiego atrybutu z element. - Jeśli rodzicem elementowym w element nie jest wartość
null, to zwróć wynik lokalizacji prefiksu przestrzeni nazw dla element z przekazaniem namespace. W przeciwnym razie zwróć wartośćnull.
locate a namespace
Aby zlokalizować przestrzeń nazw # (locate a namespace ) dla węzła node przy pomocy prefiksu przestrzeni nazw prefix należy, w zależności od node, wykonać następujące kroki:
- Dla węzła typu
Element - Jeśli jego przestrzenią nazw nie jest wartość
nulli jego prefiksem przestrzeni nazw jest prefix, to zwróć jego przestrzeń nazw. Jeśli posiada on atrybut, którego przestrzenią nazw jest przestrzeń nazw XMLNS, prefiksem przestrzeni nazw jest "
xmlns" i nazwą lokalną jest prefix, lub jeśli prefix ma wartośćnulli posiada on atrybut, którego przestrzenią nazw jest przestrzeń nazw XMLNS, prefiksem przestrzeni nazw jest wartośćnulli nazwą lokalną jest "xmlns":- Niech value będzie jego wartością jeśli nie jest ona pustym łańcuchem znakowym, w przeciwnym razie niech będzie wartością
null. - Zwróć value.
- Niech value będzie jego wartością jeśli nie jest ona pustym łańcuchem znakowym, w przeciwnym razie niech będzie wartością
- Jeśli jego rodzicem elementowym jest wartość
null, to zwróć wartośćnull. - Zwróć wynik lokalizacji przestrzeni nazw na jego rodzicu elementowym z przekazaniem prefix.
- Jeśli jego przestrzenią nazw nie jest wartość
- Dla węzła typu
Document - Jeśli jego elementem dokumentowym jest wartość
null, to zwróć wartośćnull. - Zwróć wynik lokalizacji przestrzeni nazw na jego elemencie dokumentowym z przekazaniem prefix.
- Jeśli jego elementem dokumentowym jest wartość
- Dla węzła typu
DocumentTypeiDocumentFragment - Zwróć wartość
null.
- Zwróć wartość
- Dla pozostałych węzłów
- Jeśli jego rodzicem elementowym jest wartość
null, to zwróć wartośćnull. - Zwróć wynik lokalizacji przestrzeni nazw na jego rodzicu elementowym z przekazaniem prefix.
- Jeśli jego rodzicem elementowym jest wartość
list of elements with qualified name qualifiedName
Lista elementów z nazwą kwalifikowaną qualifiedName # (list of elements with qualified name qualifiedName) dla węzła root jest kolekcją typu HTMLCollection zwróconą zgodnie z poniższym algorytmem:
- Jeśli qualifiedName ma wartość "
*" (U+002A), to zwróć kolekcję typuHTMLCollectionzakorzenioną w root, której filtr pasuje jedynie do jego potomkowych węzłów typuElement. W przeciwnym razie, jeśli właścicielem w root jest dokument HTML, to zwróć kolekcję typu
HTMLCollectionzakorzenioną w root, której filtr pasuje jedynie do jego potomkowych węzłów typuElementspełniających następujące reguły:- Ich przestrzeń nazw jest przestrzenią nazw HTML i nazwa kwalifikowana to qualifiedName uprzednio przekonwertowana na małe znaki ASCII.
- Ich przestrzeń nazw nie jest przestrzenią nazw HTML i nazwa kwalifikowana to qualifiedName.
- W przeciwnym razie zwróć kolekcję typu
HTMLCollectionzakorzenioną w root, której filtr pasuje jedynie do jego potomkowych węzłów typuElementmających nazwę kwalifikowaną wskazywaną przez qualifiedName.
Po kolejnym wywołaniu metody z tym samym argumentem, i tak długo jak typ we właścicielu skojarzonym z root nie uległ zmianie (tj. z wartości "html" na "xml" lub odwrotnie), może zostać zwrócony ten sam obiekt HTMLCollection, który utworzony i zwrócony został we wcześniejszym wywołaniu metody (szczegóły).
list of elements with namespace namespace and local name localName
Lista elementów z przestrzenią nazw namespace i nazwą lokalną localName # (list of elements with namespace namespace and local name localName) dla węzła root jest kolekcją typu HTMLCollection zwróconą zgodnie z poniższym algorytmem:
- Jeśli namespace jest pustym łańcuchem znakowym, to ustaw ją na wartość
null. - Jeśli jednocześnie namespace i localName ma wartość "
*" (U+002A), to zwróć kolekcję typuHTMLCollectionzakorzenioną w root, której filtr pasuje jedynie do jego potomkowych węzłów typuElement. - W przeciwnym razie, jeśli tylko namespace ma wartość "
*" (U+002A), to zwróć kolekcję typuHTMLCollection, której filtr pasuje jedynie do jego potomkowych węzłów typuElementmających nazwę lokalną wskazywaną przez localName. - W przeciwnym razie, jeśli tylko localName ma wartość "
*" (U+002A), to zwróć kolekcję typuHTMLCollection, której filtr pasuje jedynie do jego potomkowych węzłów typuElementmających przestrzeń nazw wskazywaną przez namespace. - W przeciwnym razie zwróć kolekcję typu
HTMLCollection, której filtr pasuje jedynie do jego potomkowych węzłów typuElementmających przestrzeń nazw wskazywaną przez namespace i nazwę lokalną wskazywaną przez localName.
Po kolejnym wywołaniu metody z tymi samymi argumentami może zostać zwrócony ten sam obiekt HTMLCollection, który utworzony i zwrócony został we wcześniejszym wywołaniu metody (szczegóły).
list of elements with class names classNames
Lista elementów z nazwami klas classNames # (list of elements with class names classNames) dla węzła root jest kolekcją typu HTMLCollection zwróconą zgodnie z poniższym algorytmem:
- Niech classes będzie wynikiem parsowania uporządkowanego zestawu na classNames.
- Jeśli classes jest pustym zestawem, to zwróć pustą kolekcję typu
HTMLCollection. Zwróć kolekcję typu
HTMLCollectionzakorzenioną w root, której filtr pasuje jedynie do jego potomkowych węzłów typuElementmających wszystkie klasy z classes.Jeśli właścicielem w root jest dokument z trybem "
quirks", to porównywanie dla klas jest wykonywane pod względem nieczułości na wielkość znaków ASCII, w przeciwnym razie porównywanie jest czułe na wielkość znaków.
Po kolejnym wywołaniu metody z tym samym argumentem może zostać zwrócony ten sam obiekt HTMLCollection, który utworzony i zwrócony został we wcześniejszym wywołaniu metody (szczegóły).
convert nodes into a node
Aby skonwertować nodes do węzła # (convert nodes into a node) należy wykonać następujące kroki:
- Niech node będzie wartością
null. - Zastąp każdy łańcuch znakowy w nodes przez węzeł typu
Text, którego danymi tekstowymi będzie łańcuch znakowy we własnej postaci. - Jeśli nodes zawiera pojedynczy węzeł, to ustaw node na ten pojedynczy węzeł.
- W przeciwnym razie ustaw node na nowy węzeł typu
DocumentFragment, a następnie dodaj każdy węzeł z nodes, jeśli w ogóle istnieje, do node. Zrzuć ponownie każdy wyjątek. - Zwróć node.
Mutation algorithms
ensure pre-insertion validity
Aby zagwarantować poprawność przed wstawieniem # (ensure pre-insertion validity) węzła node do rodzica parent przed dzieckiem child należy wykonać następujące kroki:
- Jeśli parent nie jest węzłem typu
Document,DocumentFragmentlubElement, to zrzuć wyjątek"HierarchyRequestError". - Jeśli node jest przodkiem obejmującym włącznie z hostem dla parent, to zrzuć wyjątek
"HierarchyRequestError". - Jeśli child nie ma wartości
nulli jego rodzicem nie jest parent, to zrzuć wyjątek"NotFoundError". - Jeśli node nie jest węzłem typu
DocumentFragment,DocumentType,Element,Text,ProcessingInstructionlubComment, to zrzuć wyjątek"HierarchyRequestError". - Jeśli node jest węzłem typu
Texti parent jest węzłem typuDocument, lub node jest węzłem typuDocumentTypei parent nie jest węzłem typuDocument, to zrzuć wyjątek"HierarchyRequestError". Jeśli parent jest węzłem typu
Document, to wykonaj poniższe podkroki:Jeśli node jest węzłem typu
DocumentFragment, to wykonaj poniższe wewnętrzne podkroki:- Jeśli node posiada więcej niż jedno dziecko typu
Elementlub posiada dziecko typuText, to zrzuć wyjątek"HierarchyRequestError". - Jeśli node posiada jedno dziecko typu
Element, i albo parent posiada dziecko typuElement, child jest węzłem typuDocumentType, lub child nie ma wartościnulli węzeł typuDocumentTypew parent następuje po child, to zrzuć wyjątek"HierarchyRequestError".
- Jeśli node posiada więcej niż jedno dziecko typu
- Jeśli node jest węzłem typu
Element, i albo parent posiada dziecko typuElement, child jest węzłem typuDocumentType, lub child nie ma wartościnulli węzeł typuDocumentTypew parent następuje po child, to zrzuć wyjątek"HierarchyRequestError". - Jeśli node jest węzłem typu
DocumentType, i albo parent posiada dziecko typuDocumentType, child nie ma wartościnulli węzeł typuElementw parent poprzedza child, lub child ma wartościnulli parent ma dziecko typuElement, to zrzuć wyjątek"HierarchyRequestError".
pre-insert
Przed wstawieniem # (pre-insert) węzła node do rodzica parent przed dzieckiem child należy wykonać następujące kroki:
- Zagwarantuj poprawność przed wstawieniem node do parent przed child.
- Niech reference child wskazuje na child.
- Jeśli reference child jest naszym node, to ustaw go na brata następującego w node.
- Adoptuj node do właściciela w parent.
- Wstaw node do parent przed reference child.
- Zwróć node.
insertion steps
Obowiązujące specyfikacje mogą definiować dodatkowe kroki wstawiania # (insertion steps) dla wszystkich lub poszczególnych węzłów. Do algorytmu przekazywany jest argument newNode, jak w poniższym algorytmie wstawiania.
insert
Aby wstawić # (insert) węzeł node do rodzica parent przed dzieckiem child, z opcjonalną flagą tłumienia obserwatorów suppress observers flag, należy wykonać następujące kroki:
- Niech count będzie liczbą dzieci w node jeśli jest nim węzeł typu
DocumentFragment, w przeciwnym razie niech będzie liczbą jeden. Jeśli child nie ma wartości
null, to wykonaj poniższe podkroki:- Dla każdego (for each) zakresu, którego węzłem początkowym jest parent i przesunięcie początkowe jest większe od indeksu w child, zwiększ jego przesunięcie początkowe o count.
- Dla każdego (for each) zakresu, którego węzłem końcowym jest parent i przesunięcie końcowe jest większe od indeksu w child, zwiększ jego przesunięcie końcowe o count.
- Niech nodes będą dziećmi w node jeśli node jest węzłem typu
DocumentFragment, w przeciwnym razie niech będą listą zawierającą wyłącznie node. - Jeśli node jest węzłem typu
DocumentFragment, to usuń jego dzieci z ustawieniem suppress observers flag. - Jeśli node jest węzłem typu
DocumentFragment, to kolejkuj zapis zmian z typem "childList", celem node oraz usuniętymi węzłami wskazywanymi przez nodes.Ten krok celowo nie skupia uwagi na suppress observers flag.
Dla każdego (for each) węzła newNode w nodes, zgodnie z porządkiem drzewa, wykonaj poniższe podkroki:
- Dodaj newNode do parent przed child lub, jeśli child ma wartość
null, to na końcu parent. - Uruchom dodatkowe kroki wstawiania z przekazaniem newNode.
- Dodaj newNode do parent przed child lub, jeśli child ma wartość
- Jeśli suppress observers flag nie jest ustawiona, to kolejkuj zapis zmian z typem "
childList", celem parent, dodanymi węzłami wskazywanymi przez nodes, bratem następującym wskazywanym przez child i bratem poprzedzającym będącym bratem poprzedzającym w child lub, jeśli child ma wartośćnull, to ostatnim dzieckiem w parent.
append
Aby dodać # (append) węzeł node do rodzica parent należy wykonać przed wstawianie node do parent przed null.
replace
Aby zastąpić # (replace) dziecko child węzłem node w rodzicu parent należy wykonać następujące kroki:
- Jeśli parent nie jest węzłem typu
Document,DocumentFragmentlubElement, to zrzuć wyjątek"HierarchyRequestError". - Jeśli node jest przodkiem obejmującym włącznie z hostem dla parent, to zrzuć wyjątek
"HierarchyRequestError". - Jeśli rodzicem w child nie jest parent, to zrzuć wyjątek
"NotFoundError". - Jeśli node nie jest węzłem typu
DocumentFragment,DocumentType,Element,Text,ProcessingInstructionlubComment, to zrzuć wyjątek"HierarchyRequestError". - Jeśli node jest węzłem typu
Texti parent jest węzłem typuDocument, lub node jest węzłem typuDocumentTypei parent nie jest węzłem typuDocument, to zrzuć wyjątek"HierarchyRequestError". Jeśli parent jest węzłem typu
Document, to wykonaj poniższe podkroki:Jeśli node jest węzłem typu
DocumentFragment, to wykonaj poniższe wewnętrzne podkroki:- Jeśli node posiada więcej niż jedno dziecko typu
Elementlub posiada dziecko typuText, to zrzuć wyjątek"HierarchyRequestError". - Jeśli node posiada jedno dziecko typu
Element, i albo parent posiada dziecko typuElement, którym nie jest child, albo węzeł typuDocumentTypew parent następuje po child, to zrzuć wyjątek"HierarchyRequestError".
- Jeśli node posiada więcej niż jedno dziecko typu
- Jeśli node jest węzłem typu
Element, i albo parent posiada dziecko typuElement, którym nie jest child, albo węzeł typuDocumentTypew parent następuje po child, to zrzuć wyjątek"HierarchyRequestError". - Jeśli node jest węzłem typu
DocumentType, i albo parent posiada dziecko typuDocumentType, którym nie jest child, albo węzeł typuElementw parent poprzedza child, to zrzuć wyjątek"HierarchyRequestError".
- Niech reference child będzie bratem następującym w child.
- Jeśli reference child jest naszym node, to ustaw go na brata następującego w node.
- Niech previousSibling będzie bratem poprzedzającym w node.
- Adoptuj node do właściciela w parent.
- Niech removedNodes będzie pustą listą.
Jeśli rodzic w child nie ma wartość
null, to wykonaj poniższe wewnętrzne podkroki:- Ustaw removedNodes na listę zawierającą wyłącznie child.
- Usuń child z jego parent z ustawieniem flagi tłumienia obserwatorów.
Powyższe kroki nie zostaną spełnione jedynie w sytuacji, kiedy child jest referencją do node.
- Niech nodes będzie listą ze wszystkimi dziećmi w node jeśli node jest węzłem typu
DocumentFragment, w przeciwnym razie niech będzie listą zawierającą wyłącznie node. - Wstaw node do parent przed reference child z ustawieniem flagi tłumienia obserwatorów.
- Kolejkuj zapis zmian z typem "
childList", celem parent, dodanymi węzłami wskazywanymi przez nodes, usuniętymi węzłami wskazywanymi przez removedNodes, bratem następującym wskazywanym przez child oraz bratem poprzedzającym wskazywanym przez previousSibling. - Zwróć child.
replace all
Aby zastąpić wszystko # (replace all) węzłem node w rodzicu parent należy wykonać następujące kroki:
- Jeśli node nie ma wartości
null, to adoptuj node do właściciela w parent. - Niech removedNodes będzie listą ze wszystkimi dziećmi w parent.
- Niech addedNodes będzie pustą listą jeśli node ma wartość
null, dziećmi w node jeśli node jest węzłem typuDocumentFragment, w przeciwnym razie niech będzie listą zawierającą wyłącznie node. - Usuń, zgodnie z porządkiem drzewa, wszystkie dzieci w parent z ustawieniem flagi tłumienia obserwatorów.
- Jeśli node nie ma wartości
null, to wstaw node do parent przednullz ustawieniem flagi tłumienia obserwatorów. - Kolejkuj zapis zmian z typem "
childList", celem parent, dodanymi węzłami wskazywanymi przez addedNodes oraz usuniętymi węzłami wskazywanymi przez removedNodes.
Algorytm ten nie wprowadza żadnych kontroli w odniesieniu do ograniczeń dla drzewa węzłów. Autorzy specyfikacji powinni używać go z rozwagą.
pre-remove
Przed usunięciem # (pre-remove) dziecka child z rodzica parent należy wykonać następujące kroki:
- Jeśli rodzicem w child nie jest parent , to zrzuć wyjątek
"NotFoundError". - Usuń child z parent.
- Zwróć child.
removing steps
Obowiązujące specyfikacje mogą definiować dodatkowe kroki usuwania # (removing steps) dla wszystkich lub poszczególnych węzłów. Do algorytmu przekazywane są argumenty removedNode, oldParent i oldPreviousSibling, jak w poniższym algorytmie usuwania.
remove
Aby usunąć # (remove) węzeł node z rodzica parent, z opcjonalną flagą tłumienia obserwatorów suppress observers flag, należy wykonać następujące kroki:
- Niech index będzie indeksem w node.
- Dla każdego (for each) zakresu, którego węzeł początkowy jest potomkiem obejmującym dla node, ustaw jego początek na (parent, index).
- Dla każdego (for each) zakresu, którego węzeł końcowy jest potomkiem obejmującym node, ustaw jego koniec na (parent, index).
- Dla każdego (for each) zakresu, którego węzłem początkowym jest parent i przesunięcie początkowe jest większe od index, zmniejsz jego przesunięcie początkowe o jeden.
- Dla każdego (for each) zakresu, którego węzłem końcowym jest parent i przesunięcie końcowe jest większe od index, zmniejsz jego przesunięcie końcowe o jeden.
- Dla każdego (for each) obiektu typu
NodeIteratoriterator, którego właścicielem w korzeniu skojarzonym z iterator jest właściciel w node, uruchom kroki przed-usuwania z przekazaniem node i iterator. - Niech oldPreviousSibling będzie bratem poprzedzającym w node.
- Niech oldNextSibling będzie bratem następującym w node.
- Usuń node z parent.
- Uruchom dodatkowe kroki usuwania z przekazaniem node, parent i oldPreviousSibling.
- Dla każdego (for each) przodka obejmującego ancestor w node, jeśli ancestor ma jakichkolwiek zarejestrowanych obserwatorów, w których właściwość
subtreez opcji ma boolowską wartośćtrue, to dla każdego (for each) takiego zarejestrowanego obserwatora registered dodaj do listy zarejestrowanych obserwatorów skojarzonej z node przejściowego zarejestrowanego obserwatora z obserwatorem i opcjami identycznymi jak w registered, a także ze źródłem będącym registered. - Jeśli suppress observers flag nie jest ustawiona, to kolejkuj zapis zmian z typem "
childList", celem parent, usuniętymi węzłami wskazywanymi przez listę zawierającą wyłącznie node, bratem następującym wskazywanym przez oldNextSibling oraz bratem poprzedzającym wskazywanym przez oldPreviousSibling.