DOM | Интерфейс Range

IDL

[Exposed=Window]
interface Range : AbstractRange {
   constructor();

   readonly attribute Node commonAncestorContainer;

   undefined setStart(Node node, unsigned long offset);
   undefined setEnd(Node node, unsigned long offset);
   undefined setStartBefore(Node node);
   undefined setStartAfter(Node node);
   undefined setEndBefore(Node node);
   undefined setEndAfter(Node node);
   undefined collapse(optional boolean toStart = false);
   undefined selectNode(Node node);
   undefined selectNodeContents(Node node);

   const unsigned short START_TO_START = 0;
   const unsigned short START_TO_END = 1;
   const unsigned short END_TO_END = 2;
   const unsigned short END_TO_START = 3;
   short compareBoundaryPoints(unsigned short how, Range sourceRange);

   [CEReactions] undefined deleteContents();
   [CEReactions, NewObject] DocumentFragment extractContents();
   [CEReactions, NewObject] DocumentFragment cloneContents();
   [CEReactions] undefined insertNode(Node node);
   [CEReactions] undefined surroundContents(Node newParent);

   [NewObject] Range cloneRange();
   undefined detach();

   boolean isPointInRange(Node node, unsigned long offset);
   short comparePoint(Node node, unsigned long offset);

   boolean intersectsNode(Node node);

   stringifier;
};

Объекты, реализующие интерфейс Range, известны как «живые диапазоны» (live ranges).

Примечание!

Алгоритмы, которые изменяют дерево (в частности, алгоритмы вставки, удаления, замены данных и разделения), изменяют живые диапазоны, связанные с этим деревом.

«Корень» (root) живого диапазона — это корень его начального узла.

Узел node «содержится» (contained) в живом диапазоне range, если корень node является корнем range, а (node, 0) находится после начала range, а (node, длина node) находится перед концом range.

Узел «частично содержится» (partially contained) в живом диапазоне, если он является инклюзивным предком начального узла живого диапазона, но не его конечный узел, или наоборот.

Примечание!

Некоторые факты, чтобы лучше понять эти определения:

Контент, который можно было бы считать находящимся в пределах живого диапазона, состоит из всех содержащихся узлов, плюс, возможно, часть содержимого начального узла и конечного узла, если это узлы Text, ProcessingInstruction или Comment.

Узлы, которые содержатся в живом диапазоне, обычно не будут смежными, потому что родитель содержащегося узла не всегда будет содержащимся.

Однако потомки содержащегося узла содержатся, и если два родственника (брата и сестры) содержатся, то же самое и с любыми родственниками, лежащими между ними.

Начальный узел и конечный узел из живого диапазона никогда не содержатся в нём.

Первый содержащийся узел (если есть) всегда будет после начального узла, а последний содержащийся узел всегда будет равен последнему потомку конечного узла или перед ним.

Частично содержащийся узел существует тогда и только тогда, когда начальный узел и конечный узел различны.

Значение атрибута commonAncestorContainer не содержится и не содержится частично.

Если начальный узел является предком конечного узла, общий инклюзивный предок будет начальным узлом. Ровно один из его детей будет содержаться частично, а ребёнок будет содержаться тогда и только тогда, когда он предшествует частично содержащемуся ребёнку. Если конечный узел является предком начального узла, верно обратное.

Если начальный узел не является инклюзивным предком конечного узла, и наоборот, общий инклюзивный предок будет отличаться от них обоих. Ровно два его ребёнка будут частично содержаться, а ребёнок будет содержаться тогда и только тогда, когда он находится между этими двумя.

 

Для веб-разработчиков (не нормативно)

range = new Range()

Возвращает новый живой диапазон.

Конструктор Range() при вызове должен возвращать новый живой диапазон с (связанный Document текущего глобального объекта, 0) в качестве его начала и конца.

 

Для веб-разработчиков (не нормативно)

container = range . commonAncestorContainer

Возвращает узел, наиболее удаленный от документа, который является предком как начального узла range, так и конечного узла диапазона range.

Получатель атрибута commonAncestorContainer должен выполнить следующие шаги:

1. Пусть контейнер container будет начальным узлом.
2. Хотя container не является инклюзивным предком конечного узла, пусть container будет родителем container.
3. Вернуть container

 

Чтобы «установить начало или конец» (set the start or end) диапазона range на граничную точку (node, offset), выполните следующие действия:

1. Если узел node является типом документа, выбросить исключение DOMException "InvalidNodeTypeError".
2. Если смещение offset больше длины узла node, генерируется исключение DOMException "IndexSizeError".
3. Пусть bp будет граничной точкой (node, offset).
4.

   Если эти шаги были вызваны как «установить начало»

      1. Если bp находится после конца диапазона range или если корень range не равен корню node, установите конец range на bp.
      2. Установите начало диапазона range на bp.

   Если эти шаги были вызваны как «установить конец»

      1. Если bp находится перед началом диапазона range или если корень диапазона range не равен корню узла node, установите для начала диапазона range значение bp.
      2. Установите конец диапазона range на bp.

 

Метод setStart(node, offset) при вызове должен установить начало этого this в граничную точку (node, offset).

Метод setEnd(node, offset) при вызове должен установить конец этого this в граничную точку (node, offset).

Метод setStartBefore(node) — (установка начала до) — при вызове должен выполнить следующие шаги:

1. Пусть parent будет родителем узла node.
2. Если родитель parent имеет значение NULL, выбросить исключение DOMException «InvalidNodeTypeError».
3. Установите начало этого this на граничную точку (parent, индекс узла node).

Метод setStartAfter(node) — (установка начала после) — при вызове должен выполнить следующие шаги:

1. Пусть parent будет родителем узла node.
2. Если parent имеет значение NULL, выбросить исключение DOMException «InvalidNodeTypeError».
3. Установите начало этого this на граничную точку (parent, индекс узла node плюс 1).

Метод setEndBefore(node) — (установка конца до) — при вызове должен выполнить следующие шаги:

1. Пусть parent будет родителем узла node.
2. Если parent имеет значение NULL, выбросить исключение DOMException «InvalidNodeTypeError».
3. Установите конец этого this на граничную точку (parent, индекс узла node).

Метода setEndAfter(node) — (установка конца после) — при вызове должен выполнить следующие шаги:

1. Пусть parent будет родителем узла node.
2. Если parent имеет значение NULL, выбросить исключение DOMException «InvalidNodeTypeError».
3. Установите конец этого this на граничную точку (parent, индекс узла node плюс 1).

Метод collapse(toStart) при вызове должен, если toStart имеет значение true, установить конец на начало и в противном случае установить начало на конец.

Чтобы «выбрать» (select) узел node в диапазоне range, выполните следующие действия:

1. Пусть parent будет родителем узла node.
2. Если parent имеет значение NULL, выбросить исключение DOMException «InvalidNodeTypeError».
3. Пусть index будет индексом узла node.
4. Установить начало диапазона range в граничную точку (parent, index).
5. Установить конец диапазона range в граничную точку (parent, index плюс 1).

Метод selectNode(node) при вызове должен выбрать узел внутри этого.

Метод selectNodeContents(node) при вызове должен выполнить следующие шаги:

1. Если узел node является типом документа, выбросить исключение DOMException «InvalidNodeTypeError».
2. Пусть length будет длиной узла node.
3. Установить начало в граничную точку (node, 0).
4. Установите конец в граничную точку (node, length).

 

При вызове метода compareBoundaryPoints(how, sourceRange) необходимо выполнить следующие действия:

1. Если как how не один из

START_TO_START
START_TO_END
END_TO_END
END_TO_START

затем выбросить исключение DOMException "NotSupportedError".
2. Если корень этого this не совпадает с корнем sourceRange, то бросьте исключение DOMException "WrongDocumentError".
3. Если как how является:

START_TO_START:
   Пусть эта точка this point станет началом этого this. Пусть другая точка other point будет началом sourceRange.
START_TO_END:
   Пусть эта точка this point станет концом этого this. Пусть другая точка other point будет началом sourceRange.
END_TO_END:
   Пусть эта точка this point станет концом этого this. Пусть другая точка other point будет концом sourceRange.
END_TO_START:
   Пусть эта точка this point станет началом этого this. Пусть другая точка other point будет концом sourceRange.
4. Если положение этой точки this point относительно другой точки other point является

   до (before)
      Вернуть −1.
   равно (equal)
      Вернуть 0.
   после (after)
      Вернуть 1.

При вызове метода deleteContents() необходимо выполнить следующие действия:

1. Если этот this свёрнут, то вернитесь.
2. Пусть исходный начальный узел (original start node), исходное начальное смещение (original start offset), исходный конечный узел (original end node) и исходное конечное смещение (original end offset) будут начальным узлом этого this, его начальным смещением, конечным узлом и конечным смещением соответственно.
3. Если исходный начальный узел (original start node) и исходный конечный узел (original end node) одинаковы, и они являются узлами Text, ProcessingInstruction или Comment, замените данные узлом original start node, смещением original start offset, счётчиком original end offset минус original start offset и данные пустая строка, а затем вернуться.
4. Пусть удаляемые узлы (nodes to remove) будут списком всех узлов, которые содержатся в этом this, в древовидном порядке, исключая любой узел, чей родитель также содержится в этом this.
5. Если исходный начальный узел (original start node) является инклюзивным предком исходного конечного узла (original end node), установите новый узел (new node) как исходный начальный узел (original start node), а новое смещение (new offset) - как исходное начальное смещение (original start offset).
6. В противном случае
   1. Пусть ссылочный узел (reference node) равен исходному начальному узлу (original start node).
   2. До тех пор пока родитель ссылочного узла (reference node) не является null и не является инклюзивным предком исходного конечного узла (original end node), установите ссылочный узел (reference node) на его родителя.
   3. Установите новый узел (new node) в качестве родителя ссылочного узла (reference node), а новое смещение (new offset) равным единице плюс индекс ссылочного узла (reference node).

Примечание!

Если бы родитель ссылочного узла (reference node) был null, он был бы корнем этого this, то есть был бы инклюзивным предком исходного конечного узла (original end node), и мы не смогли бы достичь этой точки.

7. Если исходный начальный узел (original start node) является узлом Text, ProcessingInstruction или Comment, замените данные с узлом original start node, смещением original start offset, счётчиком original start node минус original start offset, данные пустую строку.
8. Для каждого узла node в удаляемых узлах (nodes to remove) в порядке дерева удалите узел node.
9. Если исходный конечный узел (original end node) является узлом Text, ProcessingInstruction или Comment, замените данные с узлом original end node, смещением 0, счётчиком исходное конечное смещение (original end offset) и данные пустую строку.
10. Установите начало и конец в (new node, new offset).

 

Чтобы «извлечь» (extract) живой диапазон range, выполните следующие действия:

1. Пусть fragment будет новым узлом DocumentFragment, документ узла которого является документом узла начального узла диапазона range.
2. Если диапазон range свернут, вернуть fragment.
3. Пусть исходный начальный узел (original start node), исходное начальное смещение (original start offset), исходный конечный узел (original end node) и исходное конечное смещение (original end offset) будут соответственно начальным узлом, начальным смещением, конечным узлом и конечным смещением диапазона range.
4. Если исходный начальный узел (original start node) является исходным конечным узлом (original end node), и они являются узлами Text, ProcessingInstruction или Comment:
   1. Пусть clone будет клоном исходного начального узла (original start node).
   2. Задайте для данных clone результат подстроки данных с узлом original start node, смещения original start offset и счётчика original end offset минус original start offset.
   3. Добавить клон clone во фрагмент fragment.
   4. Замените данные с узлом original start node, смещением original start offset, счётчиком original end offset минус original start offset и данными пустую строку.
   5. Вернуть fragment
5. Пусть общий предок (common ancestor) будет исходным начальным узлом (original start node).
6. Хотя общий предок (common ancestor) не является инклюзивным предком исходного конечного узла (original end node), установите общего предка (common ancestor) для его собственного родителя.
7. Пусть первый частично содержащий ребёнок (first partially contained child) будет null.
8. Если исходный начальный узел (original start node) не not является инклюзивным предком исходного конечного узла (original end node), установите first partially contained child на первого ребёнка общего предка (common ancestor), который частично содержится в диапазоне range.
9. Пусть последний частично содержащийся ребёнок (last partially contained child) будет null.
10. Если исходный конечный узел (original end node) не not является инклюзивным предком исходного начального узла (original start node), установите last partially contained child на последнего ребёнка общего предка (common ancestor), который частично содержится в диапазоне range.

Примечание!

Эти присвоения переменных действительно всегда имеют смысл. Например, если исходный начальный узел (original start node) не является инклюзивным предком исходного конечного узла (original end node), исходный начальный узел (original start node) сам частично содержится в диапазоне range, как и все его предки до ребёнка общего предка (common ancestor). Общий предок (common ancestor) не может быть исходным начальным узлом (original start node), потому что он должен быть инклюзивным предком исходного конечного узла (original end node). Другой случай аналогичен. Также обратите внимание, что два ребёнка никогда не будут равны, если оба определены.

11. Пусть содержащие дети (contained children) будут списком всех детей общего предка (common ancestor), которые содержатся в диапазоне range, в древовидном порядке.
12. Если какой-либо член содержащихся детей (contained children) является типом документа, выбросить исключение DOMException «HierarchyRequestError».

Примечание!

Нам не нужно беспокоиться о первом или последнем частично содержащемся узле, потому что тип документа никогда не может частично содержаться. Он не может быть граничной точкой диапазона и не может быть предком чего-либо.

13. Если исходный начальный узел (original start node) является инклюзивным предком исходного конечного узла (original end node), установите новый узел (new node) как исходный начальный узел (original start node), а новое смещение (new offset) - как исходное начальное смещение (original start offset).
14. В противном случае
   1. Пусть ссылочный узел (reference node) равен исходному начальному узлу (original start node).
   2. Хотя родитель ссылочного узла (reference node) не равен null и не является инклюзивным предком исходного конечного узла (original end node), установите ссылочный узел (reference node) на его родителя.
   3. Установите новый узел (new node) как родитель для ссылочного узла (reference node), а новое смещение (new offset) равным единице плюс индекс ссылочного узла (reference node).

Примечание!

Если родитель ссылочного узла (reference node) равен null, он будет корнем диапазона range, поэтому будет инклюзивным предком исходного конечного узла (original end node), и мы не сможем достичь этой точки.

15. Если первый частично содержащийся ребёнок (first partially contained child) является узлом Text, ProcessingInstruction или Comment:

Примечание!

В этом случае first partially contained child является original start node.

   1. Пусть clone будет клоном исходного начального узла (original start node).
   2. Установите для данных clone результат подстроки данных с узлом original start node, смещения original start offset и счётчика длины original start node минус original start offset.
   3. Добавить клон clone во фрагмент fragment.
   4. Замените данные узлом original start node, смещением original start offset, подсчитайте длину original start node минус original start offset и данные пустую строку.
16. В противном случае, если первый частично содержащийся ребёнок (first partially contained child) не равен null:
   1. Пусть clone будет клоном первого частично содержащегося ребёнка (first partially contained child).
   2. Добавить клон clone во фрагмент fragment.
   3. Пусть subrange будет новым живым диапазоном, начало которого равно (исходный начальный узел, исходное начальное смещение), а концом (first partially contained child, длина first partially contained child).
   4. Пусть субфрагмент subfragment будет результатом извлечения субдиапазона subrange.
   5. Добавить субфрагмент subfragment в клон clone.
17. Для каждого содержащегося ребёнка (contained child) в содержащихся детях (contained children) добавьте contained child к fragment.
18. Если последним частично содержащимся ребёнком (last partially contained child) является узел Text, ProcessingInstruction или Comment:

Примечание!

В этом случае last partially contained child является original end node.

   1. Пусть clone будет клоном исходного конечного узла (original end node).
   2. Задайте для данных clone результат подстроки данных с узлом original end node, смещением 0 и счётчиком original end offset.
   3. Добавить клон clone во фрагмент fragment.
   4. Замените данные с узлом original end node, смещением 0, счётчиком original end offset и данные пустую строку.
19. В противном случае, если последний частично содержащийся ребёнок (last partially contained child) не равен null:
   1. Пусть clone будет клоном последнего частично содержащегося ребёнка (last partially contained child).
   2. Добавить клон clone во фрагмент fragment.
   3. Пусть subrange будет новым живым диапазоном, начало которого (последний частично содержащий ребёнок, 0), а конец (исходный конечный узел, исходное конечное смещение).
   4. Пусть субфрагмент subfragment будет результатом извлечения субдиапазона subrange.
   5. Добавить субфрагмент subfragment в клон clone.
20. Установите начало и конец диапазона range на (new node, new offset).
21. Вернуть fragment

 

Метод extractContents() при вызове должен вернуть результат извлечения этого this.

 

Чтобы «клонировать содержимое» (clone the contents) живого диапазона range, выполните следующие действия:

1. Пусть fragment будет новым узлом DocumentFragment, документ узла которого является документом узла начального узла диапазона range.
2. Если диапазон range свернут, вернуть fragment.
3. Пусть исходный начальный узел (original start node), исходное начальное смещение (original start offset), исходный конечный узел (original end node) и исходное конечное смещение (original end offset) будут соответственно начальным узлом, начальным смещением, конечным узлом и конечным смещением диапазона range.
4. Если исходный начальный узел (original start node) является исходным конечным узлом (original end node), и они являются узлами Text, ProcessingInstruction или Comment:
   1. Пусть clone будет клоном исходного начального узла (original start node).
   2. Задайте для данных clone результат подстроки данных с узлом original start node, смещения original start offset и счётчика original end offset минус original start offset.
   3. Добавить клон clone во фрагмент fragment.
   4. Вернуть fragment
5. Пусть общий предок (common ancestor) будет исходным начальным узлом (original start node).
6. Хотя общий предок (common ancestor) не является инклюзивным предком исходного конечного узла (original end node), установите общего предка (common ancestor) для его собственного родителя.
7. Пусть первый частично содержащий ребёнок (first partially contained child) будет null.
8. Если исходный начальный узел (original start node) не not является инклюзивным предком исходного конечного узла (original end node), установите first partially contained child на первого ребёнка общего предка (common ancestor), который частично содержится в диапазоне range.
9. Пусть последний частично содержащийся ребёнок (last partially contained child) будет null.
10. Если исходный конечный узел (original end node) не not является инклюзивным предком исходного начального узла (original start node), установите last partially contained child на последнего ребёнка общего предка (common ancestor), который частично содержится в диапазоне range.

Примечание!

Эти присвоения переменных действительно всегда имеют смысл. Например, если исходный начальный узел (original start node) не является инклюзивным предком исходного конечного узла (original end node), исходный начальный узел (original start node) сам частично содержится в диапазоне range, как и все его предки до ребёнка общего предка (common ancestor). Общий предок (common ancestor) не может быть исходным начальным узлом (original start node), потому что он должен быть инклюзивным предком исходного конечного узла (original end node). Другой случай аналогичен. Также обратите внимание, что два ребёнка никогда не будут равны, если оба определены.

11. Пусть содержащие дети (contained children) будут списком всех детей общего предка (common ancestor), которые содержатся в диапазоне range, в древовидном порядке.
12. Если какой-либо член содержащихся детей (contained children) является типом документа, выбросить исключение DOMException «HierarchyRequestError».

Примечание!

Нам не нужно беспокоиться о первом или последнем частично содержащемся узле, потому что тип документа никогда не может частично содержаться. Он не может быть граничной точкой диапазона и не может быть предком чего-либо.

13. Если первый частично содержащийся ребёнок (first partially contained child) является узлом Text, ProcessingInstruction или Comment:

Примечание!

В этом случае first partially contained child является original start node.

   1. Пусть clone будет клоном исходного начального узла (original start node).
   2. Установите для данных clone результат подстроки данных с узлом original start node, смещения original start offset и счётчика длины original start node минус original start offset.
   3. Добавить клон clone во фрагмент fragment.
14. В противном случае, если первый частично содержащийся ребёнок (first partially contained child) не равен null:
   1. Пусть clone будет клоном первого частично содержащегося ребёнка (first partially contained child).
   2. Добавить клон clone во фрагмент fragment.
   3. Пусть subrange будет новым живым диапазоном, начало которого равно (исходный начальный узел, исходное начальное смещение), а концом (first partially contained child, длина first partially contained child).
   4. Пусть подфрагмент subfragment будет результатом клонирования содержимого поддиапазона subrange.
   5. Добавить субфрагмент subfragment в клон clone.
15. Для каждого содержащегося ребёнка (contained child) в содержащихся детях (contained children):
   1. Пусть clone будет клоном содержащегося ребёнка (contained child) с установленным флагом clone children flag.
   2. Добавить клон clone во фрагмент fragment.
16. Если последним частично содержащимся ребёнком (last partially contained child) является узел Text, ProcessingInstruction или Comment:

Примечание!

В этом случае last partially contained child является original end node.

   1. Пусть clone будет клоном исходного конечного узла (original end node).
   2. Задайте для данных clone результат подстроки данных с узлом original end node, смещением 0 и счётчиком original end offset.
   3. Добавить клон clone во фрагмент fragment.
17. В противном случае, если последний частично содержащийся ребёнок (last partially contained child) не равен null:
   1. Пусть clone будет клоном последнего частично содержащегося ребёнка (last partially contained child).
   2. Добавить клон clone во фрагмент fragment.
   3. Пусть subrange будет новым живым диапазоном, начало которого (последний частично содержащий ребёнок, 0), а конец (исходный конечный узел, исходное конечное смещение).
   4. Пусть подфрагмент subfragment будет результатом клонирования содержимого поддиапазона subrange.
   5. Добавить субфрагмент subfragment в клон clone.
18. Вернуть fragment

 

Метод cloneContents() при вызове должен возвращать результат клонирования содержимого этого this.

 

Чтобы «вставить» (insert) узел node в живой диапазон range, выполните следующие действия:

1. Если начальный узел диапазона range является узлом ProcessingInstruction или Comment, является узлом Text, родитель которого равен null, или является node, тогда выбросить исключение DOMException "HierarchyRequestError".
2. Пусть referenceNode будет null.
3. Если начальным узлом диапазона range является текстовый узел Text, установите referenceNode для этого узла Text.
4. В противном случае установите referenceNode для ребёнка начального узла, индекс которого является начальным смещением, и null, если такого ребёнка нет.
5. Пусть parent будет начальным узлом диапазона range, если referenceNode имеет значение null, и родитель referenceNode в противном случае.
6. Убедитесь, что node соответствует до вставки в parent перед referenceNode.
7. Если начальным узлом диапазона range является узел Text, установите для referenceNode значение результата разделения с смещением начального смещения range.
8. Если node является referenceNode, установите referenceNode на его следующего родственника.
9. Если родитель node не равен null, удалите узел node.
10. Пусть newOffset будет длиной родителя parent, если referenceNode имеет значение null, а в противном случае - индексом referenceNode.
11. Увеличьте newOffset на длину node, если node является узлом DocumentFragment, и один в противном случае.
12. Предварительно вставить узел node в parent перед referenceNode.
13. Если диапазон range свёрнут, установите конец диапазона range равным (parent, newOffset).

Метод insertNode(node) при вызове должен вставить узел node в этого this

Метод surroundContents(newParent) при вызове должен выполнить следующие действия:

1. Если нетекстовый узел (non-Text) частично содержится в этом this, то генерируйте исключение DOMException «InvalidStateError».
2. Если newParent является узлом Document, DocumentType или DocumentFragment, то генерирует исключение DOMException «InvalidNodeTypeError».

Примечание!

По историческим причинам узлы Text, ProcessingInstruction и Comment здесь не проверяются и в конечном итоге выбрасываются в качестве побочного эффекта.

3. Пусть фрагмент fragment будет результатом извлечения этого this.
4. Если у newParent есть дети, замените все на null в newParent.
5. Вставьте newParent в этот this.
6. Добавить fragment в newParent.
7. Выберите newParent в this.

Метод cloneRange() при вызове должен возвращать новый живой диапазон с тем же началом и концом, что и этот this.

Метод detach() при вызове ничего не должен делать. Примечание! Его функциональность (отключение объекта Range) была удалена, но сам метод сохранен для совместимости.

 

Для веб-разработчиков (не нормативно)

position = range . comparePoint(node, offset)

Возвращает -1, если точка находится перед диапазоном, 0, если точка находится в диапазоне, и 1, если точка находится после диапазона.

intersects = range . intersectsNode(node)

Возвращает, пересекает ли диапазон range узел node.

 

При вызове метода isPointInRange(node, offset) необходимо выполнить следующие действия:

1. Если корень узла node отличается от корня этого this, верните false.
2. Если узел node является типом документа, выбросить исключение DOMException "InvalidNodeTypeError".
3. Если смещение offset больше длины узла node, генерируется исключение DOMException "IndexSizeError".
4. Если (node, offset) находится до начала или после конца, вернуть false.
5. Верните истину true.

При вызове метода comparePoint(node, offset) необходимо выполнить следующие действия:

1. Если корень узла node отличается от корня этого this, выбросить исключение DOMException "WrongDocumentError".
2. Если узел node является типом документа, выбросить исключение DOMException "InvalidNodeTypeError".
3. Если смещение offset больше длины узла node, генерируется исключение DOMException "IndexSizeError".
4. Если (node, offset) находится до начала, верните -1.
5. Если (node, offset) находится после конца, верните 1.
6. Вернуть 0.

 

При вызове метода intersectsNode(node) необходимо выполнить следующие шаги:

1. Если корень узла node отличается от корня этого this, верните false.
2. Пусть parent будет родителем узла node.
3. Если parent имеет значение null, верните true.
4. Пусть смещение offset будет индексом узла node.
5. Если (parent, offset) находится перед концом, а (parent, offset плюс 1) находится после начала, вернуть истину true.
6. Вернуть false.

«Режим преобразования в строку» (stringification behavior) должен запускать следующие шаги:

1. Пусть s будет пустой строкой.
2. Если начальный узел этого this является конечным узлом этого this и является узлом Text, то верните подстроку данных этого узла Text, начиная с начального смещения этого this и заканчивая конечным смещением этого this.
3. Если начальным узлом этого this является текстовый узел Text, добавьте подстроку данных этого узла от начального смещения этого this до конца к s.
4. Добавить объединение данных всех текстовых узлов Text, содержащихся в этом this, в древовидном порядке к s.
5. Если конечный узел этого this является текстовым узлом Text, добавьте подстроку данных этого узла от его начала до конечного смещения этого this к s.
6. Вернуть s

Примечание!

Методы createContextualFragment(), getClientRects() и getBoundingClientRect() определены в других спецификациях. [DOM-Parsing] [CSSOM-VIEW]

 

Поделись записью