Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   кнопки тегов для textarea (https://javascript.ru/forum/dom-window/55807-knopki-tegov-dlya-textarea.html)

sones 15.05.2015 11:48

кнопки тегов для textarea
 
Добрый день, есть скрипт, который по нажатию буттона подгружает в textarea пару тегов либо оборачивает ими уже введенный текст. При текущей реализации вставить можно любую пару типа:
<b></b>, <a></a> и т.д.
Я не особо разбираюсь в js и хотел бы спросить, каким образом можно релизовать в рамках данного кода вставку тега в таком виде, например:
<a href=""></a> или <font color=""></font>?
function addedidor(tag)
{
        var obj = document.getElementById('content');
        if(document.selection) obj.value += "<" + tag + "></" + tag + ">";
        else if(typeof(obj.selectionStart) == "number")
        {
                var start = obj.selectionStart;
                var end = obj.selectionEnd;
                var value = obj.value;
                obj.select();
                if(start != end)
                {
                        obj.value = value.substr(0,start) + "<" + tag + ">" + value.substr(start,end - start) + "</" + tag + ">" + value.substr(end);
                        obj.setSelectionRange(start,end + tag.length * 2 + 5);
                }
                else
                {
                        obj.value = value.substr(0,start) + "<" + tag + "></" + tag + ">" + value.substr(start);
                        obj.setSelectionRange(start + tag.length + 2,start + tag.length + 2);
                }
        }
}

<p align="right">
<input type="button" value="<b>" onClick="addedidor('b');" >&nbsp;
<input type="button" value="<i>" onClick="addedidor('i');" >&nbsp;
<input type="button" value="<u>" onClick="addedidor('u');" >&nbsp;
<input type="button" value="<h2>" onClick="addedidor('h2');" >&nbsp;
<input type="button" value="<h3>" onClick="addedidor('h3');" >&nbsp;
<input type="button" value="абзац" onClick="addedidor('p');" >&nbsp;
<input type="button" value="ссылка" onClick="addedidor('a');" >&nbsp;
</p>
<textarea id="content"></textarea>

ksa 15.05.2015 11:59

Цитата:

Сообщение от sones
каким образом можно релизовать в рамках данного кода вставку тега в таком виде, например:
<a href=""></a> или <font color=""></font>?

Как вариант, в той функции анализировать, какой именно тег хотят, и делать соответствующие "добавки" в формирование "начала" этого тега...

kostyanet 15.05.2015 19:21

В текущей - никак. Там один tag на оба конца. Надо заводить еще переменную для начала отдельно, тогда в нее можно будет напихать что хочешь. Но тогда надо будет следить чтоб в конце совпадало.

Поэтому нахер такие методы. Есть обычная замена, нафиг тут какие-то мероприятия проводить, когда все идет по событию.

kostyanet 15.05.2015 19:25

Цитата:

Сообщение от sones
value="<h2>"

А, вот что за. Редактор с кнопочками типа.

Со ссылками тут вообще облом. Они из двух частей состоят, из гипер и текста. Или придется текст просто повторять из ссылки.

рони 15.05.2015 19:52

sones,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
 <script>
    function addedidor(tag, tagEnd)
{
        tagEnd = tagEnd || tag.replace(/\s.*/,'');
        var obj = document.getElementById('content');
        if(document.selection) obj.value += "<" + tag + "></" + tagEnd + ">";
        else if(typeof(obj.selectionStart) == "number")
        {
                var start = obj.selectionStart;
                var end = obj.selectionEnd;
                var value = obj.value;
                obj.select();
                if(start != end)
                {
                        obj.value = value.substr(0,start) + "<" + tag + ">" + value.substr(start,end - start) + "</" + tagEnd + ">" + value.substr(end);
                        obj.setSelectionRange(start,end + tag.length + tagEnd.length + 5);
                }
                else
                {
                        obj.value = value.substr(0,start) + "<" + tag + "></" + tagEnd + ">" + value.substr(start);
                        obj.setSelectionRange(start + tag.length + 2,start + tag.length + 2);
                }
        }
}

 </script>
 <p align="right">
<input type="button" value='<font color="red"></font>' onClick='addedidor("font color=\"red\"");' >&nbsp;
<input type="button" value='<font color=""></font>' onClick='addedidor("font color=\"\"");' >&nbsp;
<input type="button" value='<a href=""></a>' onClick='addedidor("a href=\"\"");' >&nbsp;
<input type="button" value="<b>" onClick="addedidor('b');" >&nbsp;
<input type="button" value="<i>" onClick="addedidor('i');" >&nbsp;
<input type="button" value="<u>" onClick="addedidor('u');" >&nbsp;
<input type="button" value="<h2>" onClick="addedidor('h2');" >&nbsp;
<input type="button" value="<h3>" onClick="addedidor('h3');" >&nbsp;
<input type="button" value="абзац" onClick="addedidor('p');" >&nbsp;
<input type="button" value="ссылка" onClick="addedidor('a');" >&nbsp;
</p>
<textarea id="content"></textarea>

</body>

</html>

sones 17.05.2015 12:40

рони,
Спасибо большое, то, что нужно, единственное не могу понять, как корректно задать в скобках значение (например для цвета - "<font color="red"></font>"):
<input type="button" value='<font color=""></font>' onClick='addedidor("font color=\"\"");' >

рони 17.05.2015 15:55

sones,
смотрите пример выше строка 38 и ещё исправлена строка 31.

vlad0s0111 17.05.2015 16:39

Доброго времени суток! Решил обратится к вам за помощью так как у меня ничего не выходит. Мне нужно что бы в окошко при вводе кода(ключа) который будет мною задан, будет переходить на яндекс диск.
Вот примерный скрин.

http://imgur.com/WwmNqBX

У меня же получилось так, то при вводе любого символа или даже ничего не вводя, все равно переходит на другую ссылку(яндекс диск)

Вот мой html код:
<div align='center'><form action='Ссылка на яндекс диск'  method='get'> <input type='text' name='zbt' value='' style="background:#FFFFFF; border: 1px solid #666666; width:170px;"> </div>
<div align='center'><input type='submit' class='button' name='submit' value='Получить'></div><td class='menu' valign='top'><div class='title'> </div>


Как сделать так, что бы переходило при вводе только определенных символах.
Буду благодарен за помощь!

рони 17.05.2015 18:01

vlad0s0111,
открыли бы свою тему и для начала почитайте
https://learn.javascript.ru/forms-submit


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