Range NN 6

Первые версии броузера NN6 вызывали существенные неполадки и ошибки при работе с объектом Range. Некоторые особенности объекта Range, обсуждаемые в данном разделе, нельзя реализовать или устранить впредь до поздних модификаций NN6. Я упомянул о специфических дефектах и ошибках, проявляющихся в ранних версиях NN6 независимо от того, где находится средство, которое не может использоваться в данном броузере. Даже некоторые примеры листингов плохо поддерживаются (если вообще поддерживаются) первой модификацией NN6. Хочу заранее предупредить, что все описанные в данном разделе характерные средства броузеров большей частью относятся к Netscape Navigator

Объект Range относится к W3C DOM, поддерживаемой компанией Microsoft при разработке объекта TextRange. Количество существенных различий (немалая часть которых представляет собой почти разные словари свойств и методов) касается режима работы и функцинальных возможностей этих двух весьма подобных объектов. Хотя Microsoft была включена в рабочую группу и принимала участие в подготовке документации W3C DOM второго уровня, ни один из участников компании не получил преимуществ в используемой модели DOM - причиной тому стало появление объекта Range. Поскольку DOM версии W3C не была представлена в IЕ5.5, то говорить о поддержке объекта Range в нем не стоит даже в самых оптимистических случаях. Между тем, для сравнения свойств двух '"равнозначных" объектов просмотрите раздел, посвященный объекту TextRange. Ни один из объектов Range W3C DOM либо TextRange, предложенный Microsoft, не используется в броузерах IE/Mac.

Назначение объекта Range в W3C DOM - это предоставление сценарию возможности управления отдельными элементами содержимого (обычно это часть текстового содержимого документов), которые не всегда представлены в иерархической структуре документа отдельными узлами. Наряду с тем, что объект Range используется для получения доступа к узлам и элементам, он также расширяет границы возможностей сценария но управлению содержимым на самом детальном уровне. Содержимое объекта Range иногда называется выделением, однако это совсем не означает, что текст выделятся на странице подобно тому, как это делается с помошью мыши. Термин выделение в данном случае применяется к части содержимого документа, к которой нельзя обратиться как к отдельному объекту, расположенному вне дерева узлов документа. Как только в сценарии создастся объект Range, разработчику предоставляется возможность с помощью различных методов, проверки, изменения, удаления, перемещения и вставки содержимого страницы. Объект Range (имеется в виду экземпляр статического объекта Range) имеет начальную и конечную точку, которые совместно определяют границы диапазона. Граничные точки диапазона определяются в виде смешения относительно положения диапазона в контейнере. Смещение вычисляется в количестве символов от границы содержимого узла (при этом игнорируются любые символы атрибутов или дескрипторов HTML), однако, когда обе границы оказываются на краях одного и того же узла, смешение также может подсчитываться в количестве узлов в контейнере, окружающем начальную и конечную точки. Приведенный пример поможет понять приведенные выше рассуждения. Рассмотрим следующий упрощенный HTML-документ:

<HTML>
<BODY>
<P>This paragraph is an <EM>emphasized</EM> segment. </P>
</ BODY >
</HTML>

Можно создать объект Range, который представляет текст внутри элемента EM разными способами, в каждом из которых подсчет смещения содержимого выполняется по-разному:

  1. От единственного дочернего узла элемента EM (текстовый узел)- Смещение в начальной точке равно нулю, оно представляет собой расположение точки ввода перед первым символом (e в нижнем регистре); смещение в конечной точке равно 10, это расположение символа (отчет начинается с нуля), следующего после d (в нижнем регистре) символа.
  2. От элемента EM, В данной ситуации дочерний текстовый узел располагается внутри элемента EM. Имеется только один узел, поэтому смешение в начальной точке равно 0, в то время как в конечной точке - 1
  3. От дочерних узлов элемента P (два текстовых узла и один узел элемента). Существует возможность устанавливать значения диапазона от начальной точки до самого конца (подсчитывая символы) первого дочернего текстового узла элемента Р, Затем можно установить значение конечной точки, располагаемой перед первым симиолом последнего дочернего текстового узла элемента Р. Результирующая область определяет текст элемента ЕМ
  4. От Р-элемента, С точки зрения элемента Р. диапазон можно определить смещением от узла 1 (конец второго узла, вложенного в элемент Р) до узла 2 (начало третьего узла).

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

<P> Add now to introduce our <EM>very special</ EM > guest: </P>

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

Управление выделениями

Для создания объекта Range используйте метод document.createRange() и приравняйте объект Range, возвращаемый этим методом, переменной, которую впоследствии можно использовать для управления выделенной областью:

var rng = document.createRange()

Первые версии NN6 требуют, чтобы создаваемый с нуля объект Range определялся более явно (как описывается ниже) перед тем, как сценарий получит доступ к его свойствам. Однако нелишне отметить: в W3C DOM предполагается, что новый объект Range - это дочерний узел содержащего его узла document (заключающий в себе все содержимое страницы, включая пару дескрипторов <HTML>). Более того, начальная и конечная точка объекта Range в исходном состоянии приравниваются нулю. Это означает, что начальная выделенная область "размещается" в самом начале документа.

Наряду с активным объектом Range, хранящимся в переменной, также можно использовать большое множество других методов объекта для того, чтобы установить начальную и конечную точки области. Если область должна состоять из всего содержимого узла, то в вашем распоряжении находится два эффективных метода: selectNode() и selectContents(). Основной параметр, пригодный для обоих методов, - это ссылка на узел, содержимое которого необходимо включить в область. Различие между этими двумя методами заключается в способе подсчета смещения для области (эти методы рассмотрены детально ниже). Другой набор методов (setStartBefore(), setStartAfter(), setEndBefore(), setEndAfter()) предоставляет возможность установки значения каждой точки по отдельности относительно расположения границ узла. Для более точного задания границ области нужно использовать методы setStart() и setEnd(), позволяющие определить исходный узел (указывающий начало отсчета смещения) и целочисленное значение смещения. Если нужно указать точку вставки (например, если необходимо вставить определенное содержимое в существующий узел), следует расположить конечную точку в необходимое место, а затем запустить метод collapse(). Параметр метода определяет, в каком месте (в конечной или начальной точке области) должен запуститься метод collapse(). Набор других методов позволяет сценариям напрямую управлять содержимым области. Можно копировать (cloneContents()) удалять (deleteContents(), extractContents()), вставлять узел (insertNode()) и даже размешать содержимое области в новом родительском узле (surroundContents()). Несколько свойств предоставляют сценариям возможность проверять информацию об области (например, значения смещения), контейнерах, их содержащих, сведения о состоянии области, а также данных о внешнем наиболее близком узле, содержащем как начальную, так и конечную точку- Броузер Netscape содержит дополнительный метод управления объектом Range (который фактически является методом объекта, включающего в себя Range), называемый createContextualFragment(). Этот метод позволяет сценариям создавать полноценный узел (типа documentFragment) из произвольных строк содержимого HTML - это особенность, которая пока ещё не предложена в W3C DOM, Данный метод изначально был разработан как дополнительный, который в конечном счете стал свойством innerHTML в броузере NN6. Ислользование объекта Range может быть слегка утомительным, поскольку для его управления используется специфический набор операторов, необходимых для выполнения казалось бы самых "прозаических" задач. При использовании объекта Range обычно приходится выполнять три основных действия:

  1. Создать текстовую область
  2. Установить начальную и конечную точки
  3. Провести изменение или перемещение области

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

 
Создание объекта
NN 6 var rangeRef = document.createRange()

Свойства:


collapsed NN 6  IE n/a  DOM 2
  Чтение/Запись
 

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

 
Пример:

if (rng.collapsed) {
rng.insertNode(ссылкаНаНовыйУзел)
}

 
Возвращаемое значение:
булево
 
Значение по умолчанию: Отсутствует

commonAncestorContainer NN 6  IE n/a  DOM 2
  Чтение/Запись
 

Свойство commonAncestorContainer возвращает ссылку на узел в дереве документа, в котором расположены начальная и конечная точка диапазона. Нередко получается, что начальная точка области находится в одном узле, а конечная - в другом- В этом случае обобщённый узел в большинстве случаев состоит из обоих узлов (в некоторых случаях это узел document.body). В спецификации W3C DOM разделяемый обобщенный узел называется корневым узлом области (термин, который предоставляет больше информации).

 
 
 
Возвращаемое значение:
ссылка на объект узла
 
Значение по умолчанию: Отсутствует

endContainer, startContainer NN 6  IE n/a  DOM 2
  Чтение/Запись
 

Свойства endContainer и startContainer возвращают ссылку на узел дерева иерархической структуры документа, содержащим начальную и конечную точку области, соответственно. Имейте в виду, объектная модель автоматически рассчитывает размер контейнера, сам же контейнер может и не соответствовать необходимой ссылке, используемой для установки начальной и конечной точек области. Например, при использовании метода selectNode() для установки начальной и конечной точки области, окружающей необходимый узел, контейнеры конечных точек наиболее вероятно будут попадать в следующие по уровню узлы. Таким образом, если сначала необходимо расширить область для включения в нее узла, содержащего текущую начальную точку, необходимо использовать значение, возвращаемое свойством startContainer, в качестве параметра метода setStartBefore()

 
Пример:

rng.setStartBefore(rng. startContainer)

 
Возвращаемое значение:
ссылка на объект узла
 
Значение по умолчанию: Отсутствует

endOffset, startOffset NN 6  IE n/a  DOM 2
  Чтение/Запись
 

Свойства endOffset и startOffset возвращают целочисленное значение количества символов или узлов, которое определяет расположение начальной и конечной точки области, соответственно, Эти смещения указаны для узлов, выполняющих роли контейнеров для области (см. свойства Range,endContainer и Range.startContainer, описанные ранее). Когда граница области находится на границе узла (или лучше сказать между узлами), возвращаемое целое число задает количество узлов (отсчет начинается с нуля от граничного контейнера). Однако, когда граница области находится посредине текстового узла, возвращаемое целое число представляет собой индекс символа внутри этого узла. Тот факт, что каждая граница имеют свою систему измерения (символы или узлы, в зависимости от используемых контейнеров), может привести к путанице, если не быть достаточно внимательным. При этом возвращаемое целое число для конечной точки может быть меньшим, нежели значение для начальной точки. Давайте рассмотрим следующие вложенные элементы:

<P> This paragraph has an <EM>emphasized</EM> segment.</P>

Следующий оператор устанавливает значение начальной точки области внутри первого узла, а конечную точку области в закрывающем элементе ем узла:

var rng = document.createRange()
rng.setStart(document.getElementById("myP").firstChild, 19);
rng.setEndAfter(document.getElementById("myEM"));

Используя полужирный шрифт для представления текста области и символ вертикальной черты ( | ) для определения границ в пределах узлов, можно достаточно просто представить, как выполняется описанный выше сценарий:

<P ID="myP"> This paragraph has |an <EM>emphasized</EM> segment.</P>

Поскольку начало области находится в текстовом узле (первый дочерний узел элемента Р), значение startOffset равно 19; оно определяет расположение символа а относительно an относительно начала узла, его содержащего. Однако конечная точка находится в конце элемента ЕМ. Сценарий распознает эту точку как границу узла и поэтому осуществляет подсчет значения endOffset внутри содержимого внешнего контейнера- элемента Р. Значение endOffset равно 2 (текстовый узел элемента Р имеет индекс 0; элемент ем имеет индекс 1; конечная точка находится в начале последнего текстового узла элемента Р, имеющего индекс 2).

При создании сценариев используются значения endOffset и startOffset достаточно часто; также часто используются свойства endContainer и startContainer для получения целочисленных значений смещения

 
Пример:

см. выше

 
Возвращаемое значение:
целочисленное
 
Значение по умолчанию: Отсутствует

Методы:


cloneContents(), cloneRange() NN 6  IE n/a  DOM 2

Метод cloneContents() (не поддерживаемый в броузере NN6, однако совместимый с будущими его версиями) хранит копию содержимого объекта Range и возвращает ссылку на эту копию. Копия хранится в памяти броузера, но не является частью дерева узлов документа. Метод cloneRange() (используется в NN6.0) выполняет те же действия с областью и хранит копию области в памяти броузера. Область может содержать части соседних узлов; она не обязательно находится в одном элементе узла, Именно поэтому данные области относятся к типу documentFragment (один из типов узлов W3C DOM). Поскольку documentFragment - это реальный узел, его можно использовать в других методах узлов дерева документов, в которых узлы представляются в виде параметров. Поэтому можно смело клонировать текстовую область для того, чтобы вставить полученные копии в другом месте документа. Наоборот, метод cloneRange() предназначен для работы с объектами Range. Если вам необходимо управлять не только содержимым области, но и всем объектом Range, то этот метод возвратит ссылку на него (см. случай, когда область заключает в себя весь документ).

Метод cloneRange() можно использовать для получения копии области. Это позволяет сравнить конечные точки текущей и другой области (задача выполняется с помощью метода Range.compareBoundaryPoints())

 
Возвращаемое значение
ссылка на узел documentFragment (cloneContents()), ссылка на объект Range (cloneRange())
 
Параметры
нет

collapse() NN 6  IE n/a  DOM 2

collapse ([начальноеБулевоЗначение])

Метод collapse() используется для сжатия области от ее текущего размера до точки вставки символа. Сжатие области выполняется в том случае, хотя на первый взгляд это и кажется лишним, когда в функции сценария обрабатывается содержимое тела страницы или большая часть ее текста. Например, в типичном цикле сценария подсчета количества слов создастся текстовая область, полностью содержащая тело страницы. Чтобы начать процедуру подсчета слов, нужно сжать область до точки вставки, расположенной в ее начале. Затем, используя метод expand(), присвоить области первое слово текста (и увеличить счетчик, если метод expand() возвращает значение true). С этого момента область расширится в направлении "от" первого слова. Может оказаться необходимым сжать область в конце текущего выделения так, чтобы дальнейший поиск начинался со следующего текущего слова. Впоследствии метод collapse() выполняется с несколько измененными параметрами

Данный метод удобно использовать в начале сценария подсчета количества слов, поскольку сжатие текстовой области лучше проводить именно здесь. Однако для последующих преобразований текста нужно сжимать область таким образом, чтобы результирующая точка вставки находилась после текущей области. Таким образом, для получения вышеописанного рекомендуется задавать в методе collapse() параметр false

 
Возвращаемое значение
нет
 
Параметры
начальноеБулевоЗначение Булево значение, задающее расположение точки вставки после сжатия области (в конце или в начале текущей области). Действия по умолчанию эквиваленты значению true. Это означает, что пока метод collapse() не будет перенастроен противоположным образом, он будет преобразовывать область в точку вставки, располагающуюся перед текущей областью.

compareBoundaryPoints() NN 6  IE n/a  DOM 2

compareBoundaryPoints(целоеЧисло, ссылкаНаИсходнуюОбласть)

Создание нескольких объектов областей и присвоение их разным переменным не является проблемой. Вы можете использовать метод compareBoundaryPoints() для сравнения относительного расположения начальной и конечной точек областей. Одна область представляет собой объект, который используется для вызова метода compareBoundaryPoints (), другая же область - это второй параметр метода. Порядок, в котором происходит обращение к этим областям, влияет на результаты, полученные на основе значения первого параметра. Значением первого параметра может быть одна из четырех констант, являющихся свойствами статического объекта Range: Range.START_TO_START, Range.START_TO_END, Range. END_TO_START и Range. END_TO_END. Что определяют эти значения для текущей области зависит от того, что указано в качестве второго параметра и точки, с которой проводится сравнение. Например, рассмотрим следующее содержимое страницы, включающее две текстовые области, определенные внутри нее:

it was the best of times

Первая текстовая область (в данном случае она присвоена переменной rng1) отображается полужирным шрифтом, в то время как вторая текстовая область (rng2) представлена полужирным курсивом. Другими словами, переменная rng2 вложена в rng1. Можно сравнить начальное место расположения переменной гпд1 относительно rng2 с помощью значения Range.START_TO_START, заданного в качестве первого параметра метода compareBoundaryPoints():

var result = rng1.compareBoundaryPoints(Range START_TO_START. rng2)

Значение, возвращаемое методом compareBoundaryPoints(), является целочисленным, Если места расположения обоих анализируемых точек совпадают, то значение возвращаемой переменной равно 0, Если начальная точка так называемой исходной области располагается после области, из которой запускается метод, возвращаемое значение равно -1 в обратном случае, возвращаемое значение равно 1. Поэтому, исходя из представленного выше примера, можно сделать вывод, что поскольку начальная точка rng1 находится после начальной точки rng2, то методом возвращается значение переменной, равное -1. При изменении оператора для запуска метода в точке rng2 результат будет эквивалентен 1:

var result = rng2.compareBoundaryPoints(Range START_TO_START. rng1)

В броузере NN6 возвращаемые значения -1 и 1 являются противоположными тем, что должны быть на самом деле. Эта ситуация будет исправлена в после дующей версии броузера.

На практике, этот метод полезен для получения информации о том, совпадают ли обе области, совпадает ли одна и та же точка границ обоих областей и начинается ли одна область там, где заканчивается другая

 
Возвращаемое значение
целочисленное (-1, 0 или 1)
 
Параметры
целоеЧисло См.выше
ссылкаНаИсходнуюОбласть

createContextualFragment() NN 6  IE n/a  DOM 2

createContextualFragment("текст")

Метод createContextualFragment() - это метод объекта Range броузера NN6 (расширение объекта Range в W3C DOM). Этот метод предоставляет способ, согласно которому можно с помощью средств W3C DOM второго уровня иерархической структуры узлов создать строку текста HTML (без или с помощью дескрипторов HTML для вставки или добавления ее в существующее дерево узлов, В процессе развития броузера NN6 этот метод заполнил "пробел" в функциональных средствах и в конечном счете был одобрен для использования в Netscape, уравновешивая свойство innerHTML в броузерах Microsoft. В этом методе устранена необходимость создания сложного элемента HTML в результате построения последовательностей методов document.createElement() и document.createTextNode() для каждого фрагмента. Кроме того ненужной оказалась и перенастройка дерева узлов, предшествующая вставке в существующий документ текстового фрагмента. Однако наличие свойства innerHTML во всех объектах элементов понижает важность метода createContextualFragment(), позволяя использовать один и тот же код в различных броузерах. Параметром метода createContextualFragment() может быть любой текст, включая дескрипторы HTML. Однако для активизации метода необходимо иметь готовый объект Range. Поэтому последовательность операций по созданию узла для области документа должна быть следующей:

var rng = document.createRange();
rng.selectNode(document.body);
var fragment = rng. createContextualFragment("<H1>Howdy<H1>");

Как и область документа, узел не является частью дерева узлов документа до тех пор, пока вы не используете ее в качестве параметра одного из методов, таких как Node.insertBefore() или Node.appendChild().

 
Возвращаемое значение
узел DocumentFragment в W3C DOM
 
Параметры
текст Исходный текст элемента HTML

deleteContents() NN 6  IE n/a  DOM 2

Метод deleteContents() удаляет все содержимое текущей области дерева документа. После удаления область уменьшается в точку вставки, которая просто разделяет содержимое (если такое существует) соседних узлов. Расположение границ области заставляет броузер переопределять расположение элемента, заключенного внутрь области, после удаления последней- Простое удаление - это такое удаление, при котором границы области симметричны. В качестве примера рассмотрим следующий фрагмент HTML с выделенной полужирным шрифтом областью:

<P>One paragraph has an <EM>emphasis</EM> inside. </P>

После удаления содержимого этой области исчезнет текстовый узел внутри элемента ем, но сам элемент ЕМ останется в дереве документа (без дочерних узлов). Наряду с этим область может определяться в качестве второго дочернего узла элемента P, как показано ниже:

<P>One paragraph has an <EM>emphasis</EM> inside. </P>

Тогда при удалении содержимого области также удаляются текстовыи узел и узел элемента ЕМ, при этом элемент Р имеет единственный полноценный тестовый дочерний узел (хотя в этом случае между словами an и inside будет наблюдаться дополнительный пробел, поскольку при сжатии элемента ЕМ пробел автоматически не удаляется).

В случае несимметричности границ области, броузер сделает все возможное, чтобы обесиечить целостность дерева узлов документа после удаления. Рассмотрим следующий фрагмент HTML-кода и выделенную в нем область:

<P>One paragraph has an <EM>emphasis</EM> inside. </P>

После удаления содержимого выделенной области дерево узлов документа для этого фрагмента кода выглядит следующим образом:

<P>One paragraph has an <EM>emphasis</EM> inside. </P>

Область сжимается в точку вставки после дескриптора <ЕМ>. Однако примите к сведению, что элемент ем упорно продолжает Заботиться о тексте, все еще остающегося под его управлением. Возможны также и другие комбинации расположения границ области и узлов. Поэтому всегда проверяйте, являются ли границы области асимметричными, перед тем как выполнить удаление и применить новые параметры

 
Возвращаемое значение
нет
 
Параметры
нет

detach() NN 6  IE n/a  DOM 2

Метод detach() извещает броузер о необходимости извлечения текущего объекта области из DOM. В процессе этой операции размер объекта области приравнивается нулю, что приводит к ошибке сценария при попытке получения доступа к нему. Если необходимо, то можете назначить используемой переменной значение новой области. Не спешите с удалением области после того, как все необходимые операции с ней закончены, в конечном счете задействованные для области ресурсы броузера не столь велики. Хотя практика "уборки за собой мусора" весьма поощритсльна, особенно если сценарий повторно создаёт и управляет рядом новых выделенных областей.

 
Возвращаемое значение
нет
 
Параметры
нет

extractContents() NN 6  IE n/a  DOM 2

Метод extractContents() (не поддерживаемый в первых подверсиях NN6) удаляет содержимое области и возвращает ссылку на узел фрагмента документа, хранящегося в памяти броузера, однако больше не являющегося частью дерева узлов документа. Содержимое области может состоять из частей нескольких узлов и находиться вне одного узла элемента. Поэтому ее данные относятся к типу documentFragment (один из типов узлов W3C DOM). Поскольку documentFragment - это реально существующий узел, его можно использовать в других методах дерева документа, в которых узлы выступают в качестве параметров. В любом случае можно извлекать текстовую область из одного места документа и вставлять ее в другое

 
Возвращаемое значение
ссылка на узел documentFragment
 
Параметры
нет

insertNode() NN 6  IE n/a  DOM 2

insertNode(ссылкаНаУзел)

Метод insertNode() (не используемый в первых версиях NN6) вставляет узел в начальной точке текущей области. Вставляемый узел может быть фрагментом текстового узла, а его создателем может быть любое соответствующее средство, такое как метод document.createNode() или любой метод извлечения узла из структуры документа.

 
Возвращаемое значение
нет
 
Параметры
ссылкаНаУзел      Вставляемый узел

isValidFragment() NN 6  IE n/a  DOM 2

isValidFragment("текстHTML")

Метод isValidFragment() применим для объекта Range, представленного только в броузерах Netscape. Этот метод проверяет достоверность текста перед тем, как он будет конвертирован в узел области документа с помощью другого метода объекта Range броузера Netscape, который называется createContextualFragment() - Возьмите на заметку, что этот метод не задокументирован в HTML_ или XML. В идеальном случае, вы просто обрабатываете текст с помощью этого метода перед созданием области. Это видно на следующем примере:

     var rng = document.createRange()
    rng.selectNode(documen.body)
    var newHTML = "<Н1>Ноwdу</Н1>"
    if (rng isValidFragment(newHTML)) {
    var newFragment = rng.createContextualFragment(newHTML)}

Для получения детальной информации o том, как использовать метод Range.createContextualFragment() в узле фрагмента документа, ознакомьтесь с его описанием выше в этом разделе.

 
Возвращаемое значение
булево
 
Параметры
текстHTML     HTML-код

selectNode(), selectNodeContents() NN 6  IE n/a  DOM 2

selectNode(ссылкаНаУэел)
selectNodeContents(ссылкаНаУзел)

Методы selectNode() и selectNodeContents() - это наиболее удобные методы для задания начальной и конечной точек, между которыми размещается узел или его содержимое. Тип узла, который применяемся в качестве параметра в обоих методах (текстовый узел или узел элемента), зависит от контейнера области и единиц измерения смешения точек (см, свойства контейнера и измерение смещения точек в объекте Range).

Используйте метод selectNode(), если необходимо определить узел элемента как такой, что должен выделяться в виде области. Начальный и конечный узлы новой области - это самые близкие соседние узлы элемента. Смещение точек определяется в родительском узле выделяемого узла. Если вы выделяете текстовый узел, то его узел-контейнер для обоих точек диапазона принадлежит родительскому элементу текстового узла.

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

Обычно узлы элементов определяются как параметры в любом из методов. Это позволяет включать в область отдельные элементы (с помощью метода selectNode()) или только их содержимое (метод selectNodeContents())

 
Возвращаемое значение
нет
 
Параметры
ссылкаНаУзел     

setEnd(), setStart() NN 6  IE n/a  DOM 2

setEnd(ссылкаНаУзел, смещение)
setStart(ссылкаНаУзел, смещение)

Вам предоставляется возможность независимого задания начальной и конечной точек текстовой области. Для этого используются методы setStart() и setEnd(). Возможно, эти методы не настолько удобны, как selectNode() или selectNodeContents(), однако они позволяют получить окончательный наиболее точный результат относительного расположения границ области. Первый параметр обоих этих методов - это ссылка на узел. Эта ссылка может указывать на элемент или текстовый узел. Ваш выбор в данной ситуации также определяет систему исчисления, применяемую к целочисленному значению смещения, задаваемому в качестве второго параметра, В случае, если первый параметр является узлом элемента, смещение подсчитывается как приращение дочерних узлов внутри определенного элемента узла. Однако, если первый параметр представляет собой текстовый узел, то смещение подсчитывается как приращение Символов внутри текстового узла. При определении начальной и конечной точек области с помощью этих методов не накладываются никакие ограничения на симметричность границ области. Одна из границ может быть определена относительно текстовое узла, а дру1"ая - относительно узла элемента, или наоборот, Для задания конечной точки области, равной последнему узлу или символу внутри текстового узла (в зависимости от единиц измерения параметра смещения), используйте свойство length, Например, для задания конечной точки в конце последнее узла элемента (предполагается, что во внешнем элементе существует несколько вложенных элементов и текстовых узлов) нужно использовать первый параметр:

rng.setEnd(getElementById("myP"), document.getElementById("myP".childNodes.length));

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

var nodeRef = document.getElementById("myP").lastChild;
rng.setEnd(nodeRef.nodeValue.length);

В обоих предыдущих примерах, в которых использовано свойство length, видно, что значения свойства всегда указывают на узел или позицию символа, находящиеся после последнего объекта области. Это происходит потому. что процесс определения индекса объекта начинается с нуля. Обратите также внимание на то, что конец области и конечную точку узла можно определить с помощью четырех следующих методов: setStartAfter(), serStartBefore(), setEndAfter(), setEndBefore(). Если необходимо задать конечную точку не на границе узла, то лучше всего использовать методы setEnd() и setStart().

 
Возвращаемое значение
нет
 
Параметры
см. текст

setStartAfter()
setStartBefore()
setEndAfter()
setEndBefore()
NN 6  IE n/a  DOM 2

setStartAfter(ссылкаНаУзел)
serStartBefore(ссылкаНаУзел)
setEndAfter(ссылкаНаУзел)
setEndBefore(ссылкаНаУзел)

Начальную и конечную точки текстовой области можно задавать в соответствии с существующими границами узла с помощью этих четырех методов. Ключевые слова before и after в названиях методов используются для того, чтобы определить, какую из границ узла необходимо использовать в качестве границы области- Например, применение методов serStartBefore() и setEndAfter() для одного и того же узла элемента в качестве параметра аналогично использованию метода selectNode() для того же элемента. В качестве параметра любого из этих методов можно определить текстовый узел. Однако поскольку эти методы оперируют границами исключительно узлов, значения смещения всегда определяются с учетом расположения узла, а не символа.
Возьмите на заметку, что границы области необязательно должны быть симметричными, другими словами, одна граница может располагаться внутри одного узла, а другая-внутри другого

 
Возвращаемое значение
нет
 
Параметры
ссылкаНаУзел

surroundContents() NN 6  IE n/a  DOM 2

surroundContents(ссылкаНаУзел)

Метод surroundContents() (не подерживаемый в первых модификациях броузера NN6) используется для заключения текущей области в новый родительский элемент. Новый родительский элемент указывается как параметр метода, В процессе выполнения метода ни один из элементов или узлов дерева документа не удаляется и не перемешается, однако текущая область становится дочерним узлом нового узла, Если текущая область совпадает с уже существующим узлом, то связь между областью и его родительским узлом рассматривается как между "дедом и внуком". Применив этот метод, можно поместить выделенный посетителем страницы текст в элемент SPAN, позволяющий отображать свое содержимое с помощью специальных шрифтов или других параметров таблицы стилей. Если узел элемента используется в качестве нового родительского узла, имеющего свои собственные дочерние узлы, то эти узлы удаляются перед тем, как элемент располагается в новом контейнере. Поэтому, для получения наиболее прогнозируемых результатов, используйте в качестве параметра метода surroundContents() узлы без содержимого.

 
Возвращаемое значение
нет
 
Параметры
ссылкаНаУзел

toString() NN 6  IE n/a  DOM 2
С помощью метода toString() можно извлекать копию основного текста, расположенного в текущей области. Полученный таким образом текст не управляется ни одним из существующих в дереве документа дескрипторов HTML или узлом. Этим методом также можно пользоваться для получения текста на основе выделения, создаваемого пользователем, после того как он преобразуется в текстовую область (как только подобная возможность будет реализована в NN6).
 
Возвращаемое значение
строка
 
Параметры
нет

 


HIVE: All information for read only. Please respect copyright!
Hosted by hive КГБ: Киевская городская библиотека