Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#1: 2007-12-22 19:59:43 ЛС | профиль | цитата
Текст взят отсюда.


Как это ни "странно" :-), но реализация ветвится из-за разных методов работы с выделениями в IE и Mozilla/Gecko:
==IE4+==
В Internet Explorer используем объект selection, который представляет текущее выделение и его метод createRange, создающий объект TextRange из текущего выделения. Полученный TextRange объект имеет свойство text (для чтения и записи), которое и дает нам выделенный текст. Т.е. прочитали TextRange.text, сделали изменения и записали назад.

См. реальное использование в примере ниже.

==Mozilla/Gecko==
Ну, а здесь ситуация выглядит несколько по-другому: для достижения цели используем свойства selectionStart и selectionEnd самого объекта textarea, которые содержат начальную и конечную позицию выделения соответственно. А имея текст и зная в нем начало и конец для замены, мы можем легко заменить выделенный фрагмент на другой используя, например метод "substr()".

function replaceSelectedText(obj,cbFunc)
{
obj.focus();

if (document.selection)
{
var s = document.selection.createRange();
if (s.text)
{
eval("s.text="+cbFunc+"(s.text);");
s.select();
return true;
}
}
else if (typeof(obj.selectionStart)=="number")
{
if (obj.selectionStart!=obj.selectionEnd)
{
var start = obj.selectionStart;
var end = obj.selectionEnd;

eval("var rs = "+cbFunc+"(obj.value.substr(start,end-start));");
obj.value = obj.value.substr(0,start)+rs+obj.value.substr(end);
obj.setSelectionRange(end,end);
}
return true;
}

return false;
}

В качестве аргумента ф-ии передается объект textarea и имя вспомогательной функции, которая принимает в качестве аргумента выделенный текст и возвращает новый текст, который заменит выделенный текст. После замены текста курсор устанавливается в конец выделения.

Пример использования:
//Определяем вспомогательную ф-ю которая
//принимает строку и возвращает её в нижнем регистре
function lCase(s){return s.toLowerCase();}

//заменяем выделенную строку в нижний регистр
replaceSelectedText(document.formName.textareaName,'lCase');


Dilma, я свою часть уговора выполнил: нашёл информацию о работе с selection в FireFox. Очередь за тобой ;)
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2007-12-22 22:05:38 ЛС | профиль | цитата
iarspider, не пробовал ни разу писать сообщения в FF со старого форуму http://dev.hiasm.com/xf/newtopic.php?f=49 ? Откуда можно убедиться, что методы известны уже давно...
карма: 27
0
Ответов: 5446
Рейтинг: 323
#3: 2007-12-22 23:26:37 ЛС | профиль | цитата
Да? А почему же тогда под новым форумом, который - на данный момент - является рекомендуемым, да и вообще "витриной" возможностей пакета Web, до сих пор не работают кнопки (только не надо вспоминать про "заплатку"), цитирование, etc etc etc?
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2007-12-24 11:17:49 ЛС | профиль | цитата
потому что остается надежда, что уважаемые господа из Microsoft снизойдут до простого люда и добавят таки поддержку управления кареткой в полях ввода. Не пробовал в 7м еще - может там это уже есть...
карма: 27
0
Ответов: 5446
Рейтинг: 323
#5: 2007-12-24 22:30:33 ЛС | профиль | цитата
Dilma, oO Какая связь между FF и M$? Да, в 7-м IE кнопки работают
------------ Дoбавленo:

Только дюже тормозное это чЮдо индусских программеров
------------ Дoбавленo:

Да, кстати - тема FASMARM сломалась - на ней намертво подвисает скрипт
------------ Дoбавленo:

А про управление кареткой - см на том же сайте на той же странице следующую запись
карма: 1

0
Ответов: 9906
Рейтинг: 351
#6: 2007-12-24 22:57:05 ЛС | профиль | цитата
iarspider писал(а):
Да, кстати - тема FASMARM сломалась - на ней намертво подвисает скрипт

Dilma, а вот сейчас, одной кавычки у него, действительно - не хватало
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2007-12-25 14:11:31 ЛС | профиль | цитата
iarspider писал(а):
oO Какая связь между FF и M$?

объект selection поддерживается Opera и IE, работа с кареткой поддерживается Opera и FF. Объект selection к сожалению не является стандартом спецификации W3C DОМ. Ну и как думаешь кто и что должен добавить в свой браузер после этого?
карма: 27
0
Ответов: 5446
Рейтинг: 323
#8: 2007-12-25 17:16:12 ЛС | профиль | цитата
Dilma, работу с кареткой поддерживает и IE, правда достаточно ограниченно (в начало/в конец):

Как переместить (установить) текстовый курсор в начало или конец поля ввода textarea или input?

IE4+

Internet Explorer позволяет нам сделать это при помощи следующих методов :

createTextRange() - данный метод создает объект типа TextRange (текстовый диапазон) и позволяет манипулировать текстом. Пустой текстовый диапазон представляет собой курсор - точку ввода.

collapse() - данный метод объекта TextRange сужает текстовый диапазон до 0 (превращает его в курсор (в точку ввода)) и устанавливает точку ввода либо в начало диапазона (collapse(true) или просто collapse(), так как значение по умолчанию true) или в конец (collapse(false)).

select() - медод объекта TextRange нужный для визуального выделения текста включенного в диапазон. В случае пустого диапазона просто устанавливает текстовый курсор.

Пример:
code_8021.txt
в качестве аргумента ф-ям передается объект элемента ввода, например: moveCaretToStart(document.formName.textareaName)


Микрософт должен доработать свой браузер на предмет полной поддержки работы с кареткой. Работа с выделением есть и в FF, только несного по-другому устроена. А так как стандарта нет - то ни FF, ни IE не обязаны делать всё одинаково.
карма: 1

0
файлы: 1code_8021.txt [356B] [960]
Ответов: 11
Рейтинг: 3
#9: 2010-05-02 15:59:05 ЛС | профиль | цитата
ыыыыыыыыыыыыыыы
карма: 0

0
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)