Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка выделенного текста в разных броузерах 
:(
    Опции темы
NetJunky
Дата 22.5.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



Всем привет!
Недавно понадобилось мне из формы, а точнее из textarea выбрать выделенный текст и провести над ним свои монипуляции. Меня озадачила фраза повстречавшаяся в интернете, что у каждого броузера есть свои небольшие отклонения в синтаксисе JavaScript. Тоесть верно ли я понял, что во всех брозкерах реализация данной функции обсолютна своеобразна или же в каких-то она совпадёт.

Также собственно говоря основной вопрос, как выбрать выделенный текст из textarea.

Всем заранее спасибо за помощь.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
bars80080
Дата 22.5.2010, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



ага, к примеру:

Код

var BBCode = new Array('','','[i]','[/i]','[u]','[/u]','[align=left]','[/align]','[align=center]','[/align]','[align=right]','[/align]','[list]','\n[/list]','[li]','[/li]');
function insertBBCode(el, n) {
    var bk = el.parentNode.parentNode.parentNode.getElementsByTagName('textarea'); if(!bk[0]) { return false; }
    obj = bk[0]; obj.focus();
    var alen = BBCode[n*2].length;
    if(document.selection) {
        var s = document.selection.createRange();
        var len = s.text.length;
        var nText = BBCode[n*2] + s.text + BBCode[n*2 + 1];
        s.text = nText;
        s = document.selection.createRange();
        var df = (len < 1) ? 0 : (len + alen);
        s.moveStart("character", df); s.moveEnd("character", -(alen + 1));
        s.select();
        return true;
    }
    else if(typeof(obj.selectionStart) == 'number') {
        var start = obj.selectionStart;
        var end = obj.selectionEnd;
        var rs = BBCode[n*2] + (obj.value.substr(start,end-start)) + BBCode[n*2 + 1];
        obj.value = obj.value.substr(0,start)+rs+obj.value.substr(end);
        obj.setSelectionRange(start + alen, end + alen);
        return true;
    }
    return false;
}

два варианта вставки. первый вроде для ИЕ, второй в ФФ и хроме работает
PM MAIL WWW   Вверх
ex3c
Дата 22.5.2010, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 22.5.2010

Репутация: нет
Всего: 1



Код

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;
}


Код

replaceSelectedText(document.formName.textareaName, function (s) {
return s.toLowerCase();
});

PM MAIL   Вверх
NetJunky
Дата 23.5.2010, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



Щас такой вариант откопал и чуть под себя подогнал, для дебага.
Код

function getSelText() {
    var texting = document.getElementById("selectedtext");
    var txt = '';
    if(window.getSelection) { // FF, Chrome, Safari, Opera uses this part
        txt = texting.value.substring(texting.selectionStart, texting.selectionEnd);
        alert("1");
    } else if (document.getSelection) { // Didn't find any browser at the moment
        txt = document.getElementById("selectedtext").getSelection();
        alert("2");
    } else if (document.selection) { // IE 8 uses this part
        txt = document.selection.createRange().text;
        alert("3");
    }
    alert(txt);
}


Но вот для чего второй if пока не понимаю.
Толи для более старых версий IE толи ...

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


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
bars80080
Дата 23.5.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(NetJunky @  23.5.2010,  02:31 Найти цитируемый пост)
в твоём примере не совсем понятно почему столько раз идёт parentNode

потому что это пример. parentNode ведут куда надо. тебе достаточно видеть, что он берёт содержимое текстареи
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.