Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как взять выделенный текст из textarea? (https://javascript.ru/forum/misc/1873-kak-vzyat-vydelennyjj-tekst-iz-textarea.html)

fankiss 28.09.2008 00:31

Как взять выделенный текст из textarea?
 
К изучению JS приступил вчера. До этого уже несколько лет (4-5) писал на php. Как вы знаете, ООП там не особо широко используется. С - не знаю, так что не легко пока что приходится :)

Поставлена была задача - обогатить наворотами новостной модуль своей цмс (добавить возможность комментирования и т.д.). При помощи JS сделать добавление в форму постинга тегов а-ля ББкод. Т.е. выделяешь нужный отрезок текста, кликаешь кнопочку и он обрамляется парными тегами... при чем кросбраузерно... ну хотябы для ИЕ, Лисы и Оперы. Задача эта мне пока кажется не реальной :) Решил для начала хотябы получить выделенный отрезок текста и показать его алертом.
Что имею:
текстареа - <textarea id = "postarea" class = "text_area" rows = "5" cols = "120" name = "txt"></textarea>
линк (потом сделаю красивее) - <a onClick = "javascript:tag_add(postarea, 'b', '/b')"><b>B</b></a>
Что имеет меня:
function tag_add(obj, str1, str2){
obj.focus();
if(document.selection)
{
var s = document.selection.createRange();
alert('---' + s.text + '---');
s.text = str1 + s.text + str2;
}
return false;
}
В алерте получаю "------". Т.е. s.text пустой получается? В чем я тут не прав, и если не сложно - как мне решить глобальную задачу (пример и развернутые камменты плз.)? :)

p.s. А как в ИЕ баги отлавливать, в нем же JS консоли нет?

fankiss 28.09.2008 15:31

Стоило только добавить аттрибут href в тег a, как все заработало. ИЕ6... В пятом кажется и без этого должно работать.

fankiss 28.09.2008 17:49

Функция получилась вот такая:

function tag_add(obj, str1, str2){
obj.focus(); 
// Для IE
if(document.selection) 
 {
 var s = document.selection.createRange();
 if(s.text)
  {
  s.text = str1 + s.text + str2;
  }
 else
  {
  obj.value = obj.value + str1 + str2;
  }
 return true;
 }
// Opera, FireFox
else if (typeof(obj.selectionStart) == "number")
 {
 if (obj.selectionStart != obj.selectionEnd)
  {
  var start = obj.selectionStart;
  var end = obj.selectionEnd;
  s = obj.value.substr(start,end-start);
  obj.value = obj.value.substr(0, start) + str1 + s + str2 + obj.value.substr(end);
  }
 else
  {
  obj.value = obj.value + str1 + str2;
  }
 return true;
 }
 return false;
}
Работает, проверено. Всем спасибо за огромную помощь ))

Вася 28.03.2009 01:45

Неа
 
В IE8 не работает. (добавляет тег в конец текста)

fankiss 28.03.2009 12:03

Хм... благодарю за информацию.
Вообще со времен этого поста я уже заметно подтянул JS и ООП. Сейчас к примеру уже пишу кросбраузерное ajax приложение. Как будет время - поставлю ие8, поправлю функцию, и если не забуду то отпишусь. ;)

Гробовщик 13.02.2016 14:36

fankiss,
В итоге забыл))))


Часовой пояс GMT +3, время: 11:45.