Перехватить содержимое TEXTAREA через onSelect

helper2008
На сайте с 21.10.2012
Offline
50
897

Есть ТЕКСТАРЕА, при выделении в котором некоторого текста и нажатии кнопки отправить этот текст или в переменную или сразу в текстарее обрамить нужными тегами.

Как это делается на любом форуме.

Вот код:

<SCRIPT type=\"text/javascript\">

function changeLink()
{
var text=document.getElementById(\"editText\");
document.getElementById('editText').value=\"<B>\"+text.value+\"</B>\";
}
</SCRIPT>

<INPUT type='button' size='20' value='TEST' onclick=\"changeLink()\">

<TEXTAREA name='bd_text' id='editText' style='width:700px; height:200px;' onSelect=\"changeLink()\">";
</TEXTAREA>

Но этот код обрамляет весь текст, а не только выделенный.

Спасибо.

---------- Добавлено 09.01.2014 в 15:36 ----------

Я так понимаю, нужно ковырять в свойствах TEXTAREA.

document.getElementById('editText').select не работает.

Как обратиться к выделенному тексту в DOM?

самописные движки на Perl (http://ska32.com)
RiDDi
На сайте с 06.06.2010
Offline
285
#2

Ну в IE есть selection.createRange().text

в других браузерах selectionStart и selectionEnd

Есть неплохая статья на хабре



---------- Добавлено 09.01.2014 в 16:50 ----------

helper2008:

Как это делается на любом форуме.

Нет, делается не так. Посмотрите как делается на этом форуме :)

Вебмастер отдыхает на бережках морей. Заработок в интернете - дело техники.
helper2008
На сайте с 21.10.2012
Offline
50
#3

Всем спасибо. Вот решение, если кому надо:

<SCRIPT type=\"text/javascript\">

function changeLink()
{
t = window.getSelection();
document.getElementById('bd_keyword').value=\"<B>\"+t+\"</B>\";
}
</SCRIPT>

<INPUT type='button' size='20' value='TEST' onclick=\"changeLink()\">

<TEXTAREA name='bd_text' id='editText' style='width:700px; height:200px;' onSelect=\"changeLink()\">";
</TEXTAREA>

Я подозревал, что выделение нужно искать во всем документе, а не в отдельном тэге.

RiDDi
На сайте с 06.06.2010
Offline
285
#4
helper2008:
Всем спасибо. Вот решение, если кому надо:

<SCRIPT type=\"text/javascript\">
function changeLink()
{
t = window.getSelection();
document.getElementById('bd_keyword').value=\"<B>\"+t+\"</B>\";
}
</SCRIPT>

<INPUT type='button' size='20' value='TEST' onclick=\"changeLink()\">

<TEXTAREA name='bd_text' id='editText' style='width:700px; height:200px;' onSelect=\"changeLink()\">";
</TEXTAREA>


Я подозревал, что выделение нужно искать во всем документе, а не в отдельном тэге.

В IE нет getSelection. Юзайте что-то типа

var txt = window.getSelection ? window.getSelection().toString() : document.selection.createRange().text;

.toString() не обязательно если Вы планируете что-то вроде txt + заведомо string вроде \"<B>\"+t+\"</B>\"

helper2008
На сайте с 21.10.2012
Offline
50
#5

ИЕ мне и не нужен. Для себя админку делаю.

А чтобы юзер лишнего не выделял, можно дополнительные ограничения ввести.

Да, я поспешил. Работает только если выделить текст в текстарее, то нужный кусок перемещается куда скажу. А по кнопке пока никак. Будем крутить.

Нужно:

1. Выделил текст в текстареа.

2. Нажал кнопку.

3. Выделенный текст перенёсся куда-либо (дальше я его направлю в ту же текстарею с добавлением нужных тэгов.

RiDDi
На сайте с 06.06.2010
Offline
285
#6
helper2008:
А по кнопке пока никак.

Выделение сбрасывается раньше, чем onclick наступает. Onclick - это когда кнопка отпускается (как onkeyup). А выделение сбрасывается по onfocus.

Поменяйте onclick на onpress и заработает.

helper2008
На сайте с 21.10.2012
Offline
50
#7

onPress не заработало, а вот onMouseDown вполне. Спасибо за наводку.

Теперь осталось корректно заменять выделенный кусок текста на свою переменную t. Да, нужно довесок в виде обрамляющих тэгов сразу в переменную добавить ...

helper2008
На сайте с 21.10.2012
Offline
50
#8

В общем вот что в итоге получилось. Что мне и надо было. Всем спасибо за помощь.

Работающий код, если кому надо:

<script type="text/javaScript">

function tSelection()
{
var input = document.getElementById('input');
if (typeof(input.selectionStart)=="number")
{
if (input.selectionStart != input.selectionEnd)
{
var b1 = "<B>";
var b2 = "</B>";
var start = input.selectionStart;
var end = input.selectionEnd;
var text = input.value.substr(start,end-start);
var s = input.value ;
s = s.substr(0,start) + b1 + text + b2 + s.substr(end);
document.getElementById('input').value = s ;
}
return true;
}
}
</script>

<TEXTAREA type="text" id="input" name="input" cols="50" rows="10">
test by TEST for EVERYBODY
</TEXTAREA>
<br />
<input type="button" value="<B>...</B>" onClick="tSelection()" />

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий