Range#
Range.commonAncestorContainer#
Właściwość commonAncestorContainer
zwraca referencję do najbardziej zagnieżdżonego przodka obejmującego dla węzła początkowego i węzła końcowego w danym zakresie. Zakładamy, że schodzimy w dół drzewa węzłów, w którym zawarte są jego punkty graniczne. Właściwość jest tylko do odczytu.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var ancestor = range.commonAncestorContainer;
gdzie poszczególne człony oznaczają:
- ancestor - referencja do przodka obejmującego.
- range - zakres będący obiektem kontekstu.
W zależności od podejmowanej akcji muszą zostać wykonane następujące kroki:
Odczyt wartości atrybutu (getting):
- Niech container będzie węzłem początkowym w obiekcie kontekstu.
- Dopóki (while) container nie jest przodkiem obejmującym dla węzła końcowego w obiekcie kontekstu, to niech container będzie rodzicem w container.
- Zwróć container.
W przypadku zwiniętych zakresów zwracanym przodkiem obejmującym będzie jeden i ten sam węzeł, który jest jednocześnie jego węzłem początkowym i węzłem końcowym. Kiedy węzeł początkowy zawiera węzeł końcowy (lub odwrotnie) to zwrócony zostanie węzeł początkowy (lub węzeł końcowy dla sytuacji odwrotnej).
Ponieważ zakres nie musi być ciągły i może także częściowo obejmować węzły, to właściwość commonAncestorContainer
udostępnia wygodny sposób, aby znaleźć węzeł, który otacza cały zakres (jednocześnie jego węzeł początkowy i węzeł końcowy).
Prosty przykład:
<script>
// Tworzymy nowy zakres
var range = document.createRange();
document.write(range.commonAncestorContainer); // [object HTMLDocument]
document.write("<br><br>");
// Zmieniamy punkty graniczne zakresu (od HTML do HEAD)
range.setStart(document.documentElement, 0);
range.setEnd(document.documentElement.firstChild, 0);
document.write(range.commonAncestorContainer); // [object HTMLHtmlElement]
document.write("<br><br>");
// Zmieniamy punkty graniczne zakresu (od HTML do Document)
range.setStart(document.documentElement, 0);
range.setEnd(document, 0);
document.write(range.commonAncestorContainer); // [object HTMLDocument]
</script>
Składnia Web IDL#
interface Range { readonly attribute Node commonAncestorContainer; }