Объект textrange


Метод findText объекта TextRange Javascript

Моя проблема в том, что я хочу искать заданный текст (например, название компании) в выбранной области HTML-страницы. Поэтому я использовал Textrange.findText для него (нужна совместимость с IE). Но это только находит совпадение, если раздел не содержит
элемент. Если название компании похоже на «какая-то большая компания», а HTML — как

чем findText находит это без проблем. Но в противном случае

вызов findText («Некоторая большая компания») ничего не находит. Поэтому я полагаю, что проблема с
тегом, но многие страницы используют этот тег для форматирования текста с разрывами строк.

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

Объект textrange

Большинство разработчиков динамических web страниц привыкли использовать свойства innerText/innerHTML и outerText/outerHTML , однако для работы с текстом в Internet Explorer существует более сильный инструмент — объект TextRange, что в переводе на русский язык означает «Текстовая Область». Данный объект содержит множество методов для работы с текстом, важно что он не содержит в себе текст и элементы, а просто позволяет работать и обращаться к ним.

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

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

Данный абзац содержит несколько предложений. Выберите вариант форматирования абзаца. Элементы управления находятся снизу!

Здесь были задействованы методы: moveToElementText, move, expand, execCommand.

Данный текст подлежит цензуре, так как он содержит не нормативную лексику. Кликнув на слово подлежащее цензуре вы измените содержание и смысл текста. Кликните в любое слово этого абзаца!

Здесь были задействованы методы: moveToPoint, expand, pasteHTML.

Объект TextRange создается несколькими способами:

1. С помощью метода createTextRange в теле документа BODY:

2. С помощью метода createTextRange только в элементах TEXTAREA, BUTTON, и INPUT TYPE=text

3. С помощью метода createRange для текстового выделения document.selection, в своих примерах для наглядности я буду использовать этот способ наиболее часто.

Объект TextRange обладает следующими свойствами и методами:


Редактирование потокового документа

WPF — Периферия WPF — Редактирование потокового документа

Все контейнеры потоковых документов, с которыми вы имели дело до настоящего момента, доступны только для чтения. Они идеально подходят для отображения содержимого документа, но не разрешают пользователям вносить в них изменения. К счастью, есть еще один элемент WPF, заполняющий этот пробел: элемент управления RichTextBox.

Инструментальные пакеты для программирования уже давно содержат элементы управления, работающие с форматированным текстом. Однако элемент RichTextControl, включенный в WPF, существенно отличается от его предшественников. Он больше не ограничен устаревшим стандартом RTF, который можно встретить в программах обработки текстов. Вместо этого он хранит свое содержимое в виде объекта FlowDocument.

Это важное изменение. В элемент RichTextBox по-прежнему можно загружать RTF-содержимое, но в нем используется гораздо более простая модель потокового содержимого. Это позволяет значительно упростить программную обработку содержимого документа.

Элемент RichTextBox предлагает также расширенную модель программирования с множеством точек расширяемости, где программист может добавить собственную логику — это позволит создать на основе RichTextBox собственный текстовый редактор. Единственным недостатком этого элемента является скорость работы. Он, как и большинство его предшественников, может работать медленно.

Если вам нужно обрабатывать большие объемы данных, применять сложную логику для обработки нажатий клавиш или добавить такие эффекты, как автоматическое форматирование (наподобие подсветки синтаксиса в Visual Studio или подчеркивания при проверке правописания в Word), RichTextBox может и не обеспечить приемлемый уровень производительности.

Элемент RichTextBox не поддерживает все те возможности, которые имеются в контейнерах потоковых документов, доступных только для чтения. К примеру, в нем нет изменения масштаба, разбиения на страницы и колонки, а также поиска.

Загрузка файла

Чтобы опробовать элемент RichTextBox, можно объявить в нем один из уже знакомых вам потоковых документов:

Но практичнее прочитать документ из файла, а затем вставить его в RichTextBox. Для этого можно воспользоваться тем же подходом, что и при загрузке и сохранении содержимого элемента FlowDocument перед отображением его в контейнере, доступном только для чтения — статическим методом XamlReader.Load().

Но может понадобиться и еще одна возможность — загрузка и сохранение файлов в других форматах (а именно, .rtf-файлов). Для этой цели нужно использовать класс System.Windows.Documents.TextRange, в который упаковывается часть текста. TextRange — изумительно полезный контейнер, позволяющий преобразовывать файлы из одного формата в другой, а также применять форматирование.

Ниже представлен фрагмент простого кода, который преобразует .rtf-документ в выборку текста в объекте TextRange, после чего вставляет этот текст в RichTextBox:

Обратите внимание: прежде чем что-либо сделать, необходимо создать контейнер TextRange для той части документа, которую нужно изменить. Даже если в документе на данный момент нет никакого содержимого, необходимо определить начальную и конечную точки выборки. Чтобы выделить весь документ, можно использовать свойства ContentStart и ContentEnd, которые предоставляют объекты TextPointer, необходимые для контейнера TextRange.

После создания контейнера TextRange его можно заполнить данными с помощью метода Load(). Однако нужно еще указать строку, идентифицирующую тип формата данных, который требуется преобразовать. Можно использовать одно из следующих значений:

DataFormats.Xaml для потокового содержимого XAML;

DataFormats.Rtf для форматированного текста (как в предыдущем примере);


DataFormats.XamlPackage для потокового содержимого с внедренными изображениями;

DataFormats.Text для простого текста.

Формат DataFormats.XamlPackage практически совпадает с DataFormats.Xaml. Единственное отличие состоит в том, что DataFormats.XamlPackage хранит двоичные данные для внедренных изображений (которые отсутствуют в обычной сериализации DataFormats.Xaml). Формат пакетов XAML не является настоящим стандартом: это просто средство WPF, позволяющее упростить преобразование содержимого документа и поддерживающее другие полезные возможности, вроде вырезания и вставки или перетаскивания.

Илон Маск рекомендует:  Функции autolispа

Класс DataFormats содержит много дополнительных полей, но не поддерживает остальные. Например, невозможно преобразовать документ HTML в потоковое содержимое с помощью DataFormats.Html. И формат XAML, и RTF требуют полномочий на выполнение неуправляемого кода, а это означает, что их нельзя использовать в ситуациях с ограничением доверия (например, в браузерном приложении).

Метод TextRange.Load() работает только в том случае, если указан правильный формат файла. Однако в реальности может понадобиться создать текстовый редактор, поддерживающий как XAML (для большей точности), так и RTF (для совместимости с другими программами, такими как текстовые процессоры). Обычно в таких случаях пользователю дается возможность указать формат файла, или же формат определяется на основе расширения файла, как показано ниже:

В этом коде возникнет исключение, если файл не найден, к нему нет доступа, либо его невозможно загрузить с помощью указанного формата. По всем этим причинам нужно поместить такой код в обработчик исключения.

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

Чтобы точнее понять, о чем идет речь, можно написать простую программу, которая извлекает содержимое из объекта FlowDocument и преобразовывает его в текстовую строку с помощью конструкций XamlWriter и TextRange. Ниже показан пример, который выводит разметку для текущего потокового документа в другом текстовом поле:

Этот прием чрезвычайно полезен в качестве средства отладки — он позволяет узнать, как изменяется разметка документа после ее редактирования.

Сохранение файла

Документ можно сохранить с помощью объекта TextRange. Ему надо передать пару объектов TextPointer, определяющих начало и окончание содержимого. Затем можно вызвать метод TextRange.Save() и указать требуемый формат экспорта (текст, XAML, пакет XAML или RTF) с помощью поля из класса DataFormats. Здесь форматы пакета XAML и RTF также требуют полномочий на выполнение неуправляемого кода.

Следующий блок кода сохраняет документ в формате XAML, если имя файла не содержит расширения .rtf. (Другой, более явный подход — дать пользователю возможность применить средство сохранения, использующее XAML, и средство экспортирования, использующее RTF.)

Если для сохранения документа применяется формат XAML, то естественно можно предположить, что документ сохраняется как обыкновенный файл XAML с элементом верхнего уровня FlowDocument. Почти так, но не совсем. Элементом верхнего уровня должен быть Section.

Как уже было сказано ранее, объект Section представляет собой многоцелевой контейнер, содержащий другие блочные элементы. В этом есть смысл: ведь объект TextRange представляет раздел выделенного содержимого. Однако не пытайтесь использовать метод TextRange.Load() при работе с другими файлами XAML, которые содержат элементы верхнего уровня FlowDocument, Page или Window, поскольку ни один из этих файлов не будет скомпилирован.

Точно так же файл документа не может связаться с файлом с вынесенным кодом или прикрепить какие-либо обработчики событий. Если у вас есть файл XAML, в котором элементом верхнего уровня является FlowDocument, можно создать соответствующий объект FlowDocument с помощью метода XamlReader.Load(), как это уже делалось раньше.

Форматирование выделенного текста

Вы можете многое узнать об элементе RichTextBox, создав простой редактор форматированного текста наподобие приведенного ниже. Здесь кнопки инструментальной панели позволяют пользователю быстро применить жирное, курсивное и подчеркнутое форматирование. Однако наиболее интересной частью этого примера является расположенный ниже обычный элемент TextBox, который выводит разметку XAML для объекта FlowDocument, отображаемого в данный момент в элементе RichTextBox. Это поможет вам понять, как RichTextBox изменяет объект FlowDocument в ходе правок.


Чтобы сделать выделенный текст жирным, курсивным или подчеркнутым, не нужно писать код. Элемент RichTextBox поддерживает команды ToggleBold, ToggleItalic и ToggleUnderline из класса EditingCommands. Кнопки можно связать непосредственно с этими командами. Но данный пример демонстрирует и другие аспекты работы элемента RichTextBox. Это знание пригодится, когда вам понадобится обработать текст другим способом (ниже показан полный код редактора):

Элемент RichTextBox содержит еще много других способов обработки текста. Например, классы TextRange и RichTextBox содержат свойства, которые позволяют получать смещения символов, подсчитывать количество строк и переходить от одного потокового элемента к другому в части документа. Для получения дополнительной информации обратитесь к справочной системе Visual Studio.

Получение отдельных слов

У элемента RichTextBox есть один недостаток: он не может выделять отдельные слова в документе. Совсем не трудно найти элемент потокового документа, существующий в данной позиции (как в предыдущем разделе), но единственный способ получить ближайшее слово — перебор символов до ближайшего пробела. Кодировать такой алгоритм утомительно, а внести ошибки легко.

Один из разработчиков WPF — Праджакта Джоши (Prajakta Joshi) — опубликовал неплохое решение для обнаружения промежутков между словами. С помощью этого кода можно быстро создать много интересных эффектов.

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

Объект textrange

Represents text in an HTML element.

Members

The TextRange object has these types of members:

Methods

The TextRange object has these methods.

Compares an end point of a TextRange object with an end point of another range.

Returns a duplicate of the TextRange.

Executes a command on the current document, current selection, or the given range.

Displays help information for the given command identifier.


Expands the range so that partial units are completely contained.

Searches for text in the document and positions the start and end points of the range to encompass the search string.

Retrieves a bookmark (opaque string) that can be used with moveToBookmark to return to the same range.

Retrieves an object that specifies the bounds of a collection of TextRectangle objects.

Retrieves a collection of rectangles that describes the layout of the contents of an object or range within the client. Each rectangle describes a single line.

Returns a value indicating whether one range is contained within another.

Returns a value indicating whether the specified range is equal to the current range.

Collapses the given text range and moves the empty range by the given number of units.

Changes the end position of the range.

Changes the start position of the range.

Moves to a bookmark.

Moves the text range so that the start and end positions of the range encompass the text in the given element.

Moves the start and end positions of the text range to the given point.

Retrieves the parent element for the given text range.

Pastes HTML text into the given text range, replacing any previous text and HTML elements in the range.

Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.

Returns a Boolean value that indicates whether the specified command is in the indeterminate state.


Returns a Boolean value that indicates the current state of the command.

Returns a Boolean value that indicates whether the current command is supported on the current range.

Retrieves the string associated with a command.

Returns the current value of the document, range, or current selection for the given command.

Causes the object to scroll into view, aligning it either at the top or bottom of the window.

Makes the selection equal to the current object.

Sets the endpoint of one range based on the endpoint of another range.

Properties

The TextRange object has these properties.

Method Description
compareEndPoints

Retrieves the height of the rectangle that bounds the TextRange object.

Retrieves the distance between the left edge of the rectangle that bounds the TextRange object and the left side of the object that contains the TextRange.

Retrieves the distance between the top edge of the rectangle that bounds the TextRange object and the top side of the object that contains the TextRange.

Retrieves the width of the rectangle that bounds the TextRange object.

Retrieves the HTML source as a valid HTML fragment.

Retrieves the calculated left position of the object relative to the layout or coordinate parent, as specified by the offsetParent property.

Retrieves the calculated top position of the object relative to the layout or coordinate parent, as specified by the offsetParent property.


Sets or retrieves the text contained within the range.

Standards information

There are no standards that apply here.

Remarks

Use this object to retrieve and modify text in an element, to locate specific strings in the text, and to carry out commands that affect the appearance of the text.

Modify the extent of the text range by moving its start and end positions with methods such as move, moveToElementText, and findText. Within the text range, you can retrieve and modify plain text or HTML text. These forms of text are identical except that HTML text includes HTML tags, and plain text does not.

Examples

This example changes the text of a button element to «Clicked» through the TextRange object.

TextRange

HTML (DHTML)

TextRange Collection

Retrieves a collection of TextRange objects.

Property Description
[ oColl = ] selection. TextRange
[ oObject = ] selection .TextRange( vIndex [, iSubIndex ] )
oColl Array of elements created with the createRangeCollection method.
oObject Reference to an individual item in the array of elements contained by the object.
vIndex Required. Integer or string that specifies the element or collection to retrieve. If this parameter is an integer, the method returns the element in the collection at the given position, where the first element has value 0, the second has 1, and so on. If this parameter is a string and there is more than one element with the name or id property equal to the string, the method returns a collection of matching elements.
iSubIndex Optional. Position of an element to retrieve. This parameter is used when vIndex is a string. The method uses the string to construct a collection of all elements that have a name or >iSubIndex.

The following table lists the members exposed by the TextRange object. Click a tab on the left to choose the type of member you want to view.

Property Description
Sets or retrieves the number of objects in a collection.
Method Description
Retrieves an object from the filters collection or various other collections.
Retrieves an object or a collection from the specified collection.


Elements can be accessed through the item method, or you can use an index to directly access an element in the collection. For example, the element returned from the collection represented by oColl(0) is the same as the element returned by oColl.item(0) .

The TextRange collection is available as of Internet Explorer 5.5.

There is no public standard that applies to this collection.

Объект textrange

Contribute to this content

Contains the text that is attached to a shape, in addition to properties and methods for manipulating the text. This topic describes how to:

Return the text range in any shape you specify.

Return a text range from the selection.

Return particular characters, words, lines, sentences, or paragraphs from a text range.

Insert text, the date and time, or the page number into a text range.

Use the TextRange property of the TextFrame object to return a TextRange object for any shape you specify. Use the Text property to return the string of text in the TextRange object. The following example adds a rectangle to the active publication and sets the text it contains.

Because the Text property is the default property of the TextRange object, the following two statements are equivalent.

Use the HasTextFrame property to determine whether a shape has a text frame, and use the HasText property to determine whether the text frame contains text.

Use the TextRange property of the Selection object to return the currently selected text. The following example copies the selection to the Clipboard.

Use one of the following methods to return a portion of the text of a TextRange object: Characters , Lines , Paragraphs , or Words . The following example formats the second word in the first shape on the first page of the active publication. For this example to work, the specified shape must contain text.

Use one of the following methods to insert characters into a TextRange object: InsertAfter , InsertBefore , InsertDateTime , InsertPageNumber , or InsertSymbol . This example inserts a new line with text after any existing text in the first shape on the first page of the active publication.

Метод findText объекта TextRange Javascript


Моя проблема в том, что я хочу искать заданный текст (например, название компании) в выбранной области HTML-страницы. Поэтому я использовал Textrange.findText для него (нужна совместимость с IE). Но это только находит совпадение, если раздел не содержит
элемент. Если название компании похоже на «какая-то большая компания», а HTML — как

чем findText находит это без проблем. Но в противном случае

вызов findText («Некоторая большая компания») ничего не находит. Поэтому я полагаю, что проблема с
тегом, но многие страницы используют этот тег для форматирования текста с разрывами строк.

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

Вопрос по selection, dhtml, javascript, internet-explorer, html &#8211 Смещение символов в TextRange в Internet Explorer

Насколько я могу судить, в Internet Explorer нет простого способа получить смещение символа из объекта TextRange. У объекта Range W3C есть узел и смещение в текст в этом узле. IE, кажется, просто имеет смещение пикселей. Существуют методы для создания, расширения и сравнения диапазонов, поэтому можно было бы написать алгоритм для вычисления смещения символов, но я чувствую, что что-то упустил.

Итак, как проще всего рассчитать смещение символов при запуске InternetR TextRange?

используя значения смещения textRange:

IERangeили просто TextRange -До- DOM Range Алгоритм из этого.

Обновление, 9 августа 2011 г.

Я бы сейчас предложил использовать свой собственныйСтройный библиотека, которая по идее похожа на IERange, но гораздо более полно реализована и поддерживается.

Вы можете перебирать элементы тела TextRange.text использование имущества String.substring() сравнить с TextRange, для которого вы хотите смещение символа.

Поскольку moveEnd возвращает количество фактически перемещенных символов, смещение теперь должно быть смещением от начала документа. Это отлично работает для тестирования примитивного перемещения каретки, но для расширенного выбора и для получения точного узла, который содержит привязку диапазона, вам понадобится нечто более сложное:

Это должно вернуть правильное смещение текста каретки. Конечно, если вы уже знаете целевой узел или можете предоставить контекст, вы можете пропустить весь цикл поиска зацикливания.

Объект textrange

Contribute to this content

Contains the text that is attached to a shape, in addition to properties and methods for manipulating the text. This topic describes how to:


Return the text range in any shape you specify.

Return a text range from the selection.

Return particular characters, words, lines, sentences, or paragraphs from a text range.

Insert text, the date and time, or the page number into a text range.

Use the TextRange property of the TextFrame object to return a TextRange object for any shape you specify. Use the Text property to return the string of text in the TextRange object. The following example adds a rectangle to the active publication and sets the text it contains.

Because the Text property is the default property of the TextRange object, the following two statements are equivalent.

Use the HasTextFrame property to determine whether a shape has a text frame, and use the HasText property to determine whether the text frame contains text.

Use the TextRange property of the Selection object to return the currently selected text. The following example copies the selection to the Clipboard.

Use one of the following methods to return a portion of the text of a TextRange object: Characters , Lines , Paragraphs , or Words . The following example formats the second word in the first shape on the first page of the active publication. For this example to work, the specified shape must contain text.

Use one of the following methods to insert characters into a TextRange object: InsertAfter , InsertBefore , InsertDateTime , InsertPageNumber , or InsertSymbol . This example inserts a new line with text after any existing text in the first shape on the first page of the active publication.

Как получить объект TextRange от выбора пользователя в IE11?

Я изо всех сил, чтобы воспроизвести какой-то код, который работает в Internet Explorer 10 и раньше, но не в версии 11:

Когда консоль IE переключается эмулировать версии 10, этот код работает отлично.

Я не знаю , что выбор больше не поддерживается, поэтому я попытался заменить , что с window.getSelection (). Со старым объектом выбора, вы могли бы назвать createRange () , чтобы получить объект TextRange, который дал доступ к методам , как расширить .

Используя GetSelection, однако, не существует метода createRange (). Я попытался getRangeAt ()

. но в этом случае объект диапазона возвращается не является объект TextRange и не реализует метод расширения.

Любые идеи о том, как этот код может быть изменен, чтобы работать в IE 11?

Илон Маск рекомендует:  Что такое код imap_utf7_encode
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL