HTML | Алгоритм сбора отображаемого текста

HTML | Алгоритм сбора отображаемого текста

Шаги сбора отображаемого текста (rendered text collection steps), заданные узлом node, следующие:

1. Пусть элементы items будут результатом выполнения шагов сбора отрендеренного текста с каждым дочерним узлом node в порядке дерева, а затем объединения результатов в один список.

2. Если вычисленное значение «видимости» узла node не является «видимым», верните элементы items.

3.  Если узел node не визуализируется, верните элементы items. Для целей этого шага следующие элементы должны действовать так, как описано, если вычисленное значение свойства ‘display‘ (отображать) не равно ‘none‘ (нет):

элементы select (выбор) имеют связанный не заменяемый встроенный CSS-блок, дочерние поля которого включают только дочерние узлы optgroup и элемент option;

элементы optgroup имеют связанный не замененный CSS-блок на уровне блока, дочерние поля которого включают только дочерние узлы элемента option;

элемент option имеет связанный не замененный CSS-блок на уровне блока, дочерние поля которого являются обычными для не замененных блоков на уровне CSS-блоков.

 

Примечание

элементы могут быть непустыми из-за ‘display:contents‘.

4. Если узел node является текстовым узлом Text, то для каждого текстового поля CSS, созданного узлом node, в порядке содержимого вычислите текст поля после применения правил обработки CSS ‘white-space’ (пробелов) и правил ‘text-transform’ (преобразования текста), установите элементы items в список результирующих строк и верните элементы items. Правила обработки пробелов CSS ‘white-space’ немного изменены: складные пробелы в конце строк всегда сворачиваются, но они удаляются только в том случае, если строка является последней строкой блока или заканчивается элементом br. Мягкие дефисы должны быть сохранены. [CSSTEXT]

5. Если node является элементом br, то добавьте к элементам items строку, содержащую одну кодовую точку U+000A LF.

6. Если вычисленное значение узла node ‘display’ равно ‘table-cell’ (таблице-ячейке), а CSS-блок узла node не является последним полем ‘table-cell’ (таблица-ячейка) включающего его поля ‘table-row’ (таблица-строка), добавьте строку, содержащую одну кодовую точку U+0009 TAB указывает на элементы items.

7. Если вычисленное значение узла node ‘display’ равно ‘table-row’ (строке таблицы), а CSS-блок узла node не является последним полем ‘table-row’ (строка таблицы) ближайшего поля ‘table’ (таблица) предка, добавьте строку, содержащую одиночный код U+000A LF указывать на элементы items.

8. Если node является элементом p, добавьте 2 (требуемый счётчик разрыва строки) в начале и в конце элементов items.

9. Если используемое значение узла node из ‘display’ является уровень блока или ‘table-caption’, добавьте 1 (требуемый счётчик разрыва строки) в начале и в конце элементов. [CSSDISPLAY]

Примечание

В эту категорию попадают плавающие элементы и элементы с абсолютным позиционированием.

10. Вернуть items

 

Примечание

Обратите внимание, что узлы-потомки большинства заменяемых элементов (например, textarea, input и video, но не button) строго говоря не визуализируются CSS и, следовательно, не имеют блоков CSS для целей этого алгоритма.

 

Внимание

Этот алгоритм можно обобщить для работы с диапазонами. Затем мы можем использовать его в качестве основы для строкового фильтра Selection и, возможно, выставить его непосредственно на диапазонах. См. ошибку Bugzilla 10583.

 

 

Информационные ссылки

HTML | Алгоритм innerText

JavaScript | Чем отличается innerText от textContent?

Стандарт HTML — Раздел «rendered text collection steps» — https://html.spec.whatwg.org/multipage/dom.html#rendered-text-collection-steps