Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.152.173] |
|
Сообщ.
#1
,
|
|
|
Помогите пожалуйста !!
Пишу скрипт для добавления новостей. В поле text area нужно вводить новость, для форматирования текста есть кнопки (например B-жырный и т д), нужно чтобы когда я выделяю мышью текст и нажимаю кнопку форматирования в начале и в конце виделения появлялись тэги, например <b>Выделенный текст</b>, а если ничего не выделено, то на месте курсора должен появляться открывающий тэг (или закрывающий - в зависимости был ли открывающий). Вообщем точно так же как это сделано на этом форуме и многих других |
Сообщ.
#2
,
|
|
|
Вот скрипт:
<FORM NAME="myForm"> <TEXTAREA NAME="myArea" COLS="40" ROWS="4"></TEXTAREA> </FORM> <script LANGUAGE="JavaScript"> <!-- function display() { if (document.getSelection) { var str = document.getSelection(); } else if (document.selection && document.selection.createRange) { var range = document.selection.createRange(); var str = range.text; } else { var str = "Sorry, this is not possible with your browser."; } document.myForm.myArea.value = str; } if (window.Event) document.captureEvents(Event.MOUSEUP); document.onmouseup = display; // --> </SCRIPT> Но учти, это работает не под всеми браузерами! Напрмер, любимая Опера не поддерживает. =( |
Сообщ.
#3
,
|
|
|
А теперь я должен во всём тексте найти str и в её начале вставить <b>, а вконце </b>?
|
Сообщ.
#4
,
|
|
|
Цитата Demon_id, 22.08.04, 10:21 Это лучше будет сделать на стороне сервера. На PHP, например, проблема решается использованием функции strtr(). У тебя на сайте предусматривается использование каких-либо серверных языков? Если же использование JS обязательно, то используем функцию, которую приводил Rom@nych function strtr(str, what, _with) { var temp = ''; if (typeof(_with) != 'undefined') { var t = what; var what = new Array(); what[t] = _with; }//if for (var _what in what) { temp = ''; for (var i = 0; i < str.length; i++) { var sub = str.substr(i, _what.length); if (typeof(what[sub]) != 'undefined') { temp += what[sub]; i += _what.length - 1; }//if else { temp += str.charAt(i); }//else }//for str = temp; }//for return temp; }//function var smiles = new Array(); smiles[':)'] = '<img src="1.gif" />'; smiles[';)'] = '<img src="2.gif" />'; smiles[':\'('] = '<img src="3.gif" />'; var message = 'Hello:) How are you;)'; message = strtr(message, smiles); |
Сообщ.
#5
,
|
|
|
! Для личный переписки существует приват на премодерацию тебя |
Сообщ.
#6
,
|
|
|
Вот написал что-то вроде...
<script LANGUAGE="JavaScript"> function strtr(str, what, _with) { var temp = ''; if (typeof(_with) != 'undefined') { var t = what; var what = new Array(); what[t] = _with; }//if for (var _what in what) { temp = ''; for (var i = 0; i < str.length; i++) { var sub = str.substr(i, _what.length); if (typeof(what[sub]) != 'undefined') { temp += what[sub]; i += _what.length - 1; }//if else { temp += str.charAt(i); }//else }//for str = temp; }//for return temp; }//function </script> <script> function display() { if (document.getSelection) { var str = document.getSelection(); } else if (document.selection && document.selection.createRange) { var range = document.selection.createRange(); var str = range.text; } str2="<b>"+str+"</b>"; message1 = document.myForm.myArea.value; message = strtr(message1, str,str2); document.myForm.myArea.value=message; } </script> <html> <FORM NAME="myForm"> <TEXTAREA NAME="myArea" COLS="40" ROWS="4"></TEXTAREA> </FORM> </html> <a href='javascript:display()'>заменить</a> |
Сообщ.
#7
,
|
|
|
Цитата Argentum @ 22.08.04, 09:16 Но учти, это работает не под всеми браузерами! Например, любимая Опера не поддерживает. =( Любимая Опера (7.60 preview 1) научилась, наконец работать с range'ами. Естественно, в формате DOM. Пустой range создаётся просто - document.createRange(), но понятно, что он никому нафиг не сдался. Проблема в том, что я никак не могу найти способ получить этот range по текущему выделению. В Мозилле всё просто - window.getSelection() выдаёт этот самый DOM Range, но в Опере такого метода нет. Есть только метод document.getSelection() - но он всегда возвращает пустую строку. Никто не знает способа получить выделение в Опере 7.60 форме DOM Range? |
Сообщ.
#8
,
|
|
|
Цитата У меня твой пример работает во всех семёрках! Но учти, это работает не под всеми браузерами! Напрмер, любимая Опера не поддерживает. =( Добавлено Цитата UNV, 18.10.04, 06:01 юбимая Опера (7.60 preview 1) научилась, наконец работать с range'ами Разве? Кто тебе сказал? Тут ничего не говорится о range. |
Сообщ.
#9
,
|
|
|
Ну, на сайте Оперы сказано, что у неё улучшена поддержка всяких стандартов. Конечно, конкретно про range'и не упоминается. Однако не подумай, что я её не скачал и не попробовал. document.createRange() работает. С помощью этого range действительно можно ходить по dom-дереву, можно зайти в TextArea и произвести различные операции с текстом (текст - это её дочерний элемент). Но получить выделенный фрагмент в виде range я не смог - не нашёл соответствующего метода. |