[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание BB Code
TMake
Вот появилась необходимость создать bb код и сталкнулся с такой проблемой как вставить между тегов выделенный текст если он есть, а если его нет то ставить курсор между этими тегами?
Вот что я делал:
HTML
<script>
function bbcode($code){
teg_open='['+$code+']';
teg_close='[/'+$code+']';
document.form.text.value+= teg_open;
document.form.text.focus();
document.form.text.value+=teg_close;
</script>
<form name="form" action="index.php" method=POST>
<a href="#" onClick="javascript:bbcode('b');">B</a>
<textarea name="text"></textarea>
</form>




Спустя 1 минута, 58 секунд (26.05.2009 - 13:27) FatCat написал(а):
Может взять ББ-редактор с этого движка?
Он уже сделан конструктором, вполне приличная кроссбраузерность.

Спустя 3 минуты, 10 секунд (26.05.2009 - 13:30) stepan написал(а):
FatCat спосибо конечно но хочется все таки уметь самому делать это делать и теперь преходится насидать на javascript

Спустя 1 час, 2 минуты, 34 секунды (26.05.2009 - 14:32) FatCat написал(а):
Цитата (stepan @ 26.05.2009 - 13:30)
хочется все таки уметь самому делать это

Одобрямс.
Тогда держи для рассмотрения под микроскопом функцию, если есть выделение текста:
Код
function getText() {
   if (ie) {
       return ((form["Post"].createTextRange && form["Post"].caretPos) ? form["Post"].caretPos.text : '');
   } else {
       return form["Post"].value.substr(form["Post"].selectionStart, form["Post"].selectionEnd-form["Post"].selectionStart);
   }
}
и основу функции вставки кода по позиции курсора:
Код
function ubbCode(code) {
   if (form["Post"].createTextRange && form["Post"].caretPos) {
       var caretPos = form["Post"].caretPos;
       caretPos.text = code;
   } else {
       var sel1 = form["Post"].value.substr(0,form["Post"].selectionStart);
       var sel2 = form["Post"].value.substr(form["Post"].selectionEnd,form["Post"].value.length-form["Post"].selectionEnd);
       form["Post"].value = sel1+code+sel2
   }
}

В обоих функциях по else кодируется кривая объектная модель лисы...

То есть, для нормальных браузеров используем метод caretPos, для лисы ее собственные хитрые методы selectionStart и selectionEnd.

Спустя 36 минут, 33 секунды (26.05.2009 - 15:09) stepan написал(а):
Помоги теперь разобрать все по порядку:
if (ie){ это если internet exploer
Что вот это за строчка(что она означает) form["Post"].createTextRange

Спустя 7 минут, 41 секунда (26.05.2009 - 15:17) FatCat написал(а):
form["Post"] - объект (<textarea name="Post" ...>),
createTextRange - метод объекта.
Метод createTextRange отдает подстроку выделенного текста как объект ненулевого размера.
Метод caretPos отдает позицию курсора как объект нулевого размера.

Спустя 2 минуты, 31 секунда (26.05.2009 - 15:19) FatCat написал(а):
Соответственно, если выделена подстрока, мы ее обрамляем ББ-кодами; если подстрока не выделена, то в объект точки курсора мы вставляем ББ-код.
Там еще есть счетчик четности, чтобы вводить открывающий или закрывающий, я не стал цитировать код счетчика.

Спустя 9 минут, 2 секунды (26.05.2009 - 15:28) stepan написал(а):
Со счетчиком я разберусь
Огромное тебе спасибо буду ковырятся.

Спустя 22 часа, 18 минут, 45 секунд (27.05.2009 - 13:47) gletscherl написал(а):
а будет ли считаться BB кодом вот что:
также, как и на этом форуме человек при отправке сообщений может использовать для оформления теги
Код
[img][/img] [b][/b] [i][/i] [spoiler][/spoiler]
и т.д, но на выходе я просто заменяю эти теги на соответствующие им, только в html варианте (через str_replace)?

Спустя 54 минуты, 42 секунды (27.05.2009 - 14:42) FatCat написал(а):
Цитата (gletscherl @ 27.05.2009 - 13:47)
на выходе я просто заменяю эти теги на соответствующие им, только в html варианте (через str_replace)

Мдя...
Пара незакрытых [b] и [i] просто поломают последующую страницу.
А вот замена [img] без проверки содержимого - это экстрим более высокого порядка. Подсунут обработчик джаваскрипт, и поплывут куки каждого посетителя страницы. Если есть автологин на куках - потекут логины с паролями.

Спустя 13 часов, 53 минуты, 11 секунд (28.05.2009 - 04:35) gletscherl написал(а):
а если нет куков biggrin.gif

Спустя 2 часа, 36 минут, 33 секунды (28.05.2009 - 07:11) stepan написал(а):
Есть куки, нет куки это значения не имеет, самое главное чтобы проверялось соответствие количеству открытых и закрытых тегов, а картинки надо проверять на безопасность и все будет ничтяк.

Спустя 2 месяца, 7 дней, 5 часов, 8 минут, 35 секунд (5.08.2009 - 12:20) Guest написал(а):
rolleyes.gif

Спустя 1 месяц, 19 дней, 19 часов, 48 минут, 33 секунды (25.09.2009 - 08:09) Guest написал(а):
ge

Спустя 40 минут, 7 секунд (25.09.2009 - 08:49) glock18 написал(а):
может не совсем вовремя, но:

HTML
<script>
function bbcode($code){
teg_open='['+$code+']';
teg_close='[/'+$code+']';
document.form.text.value+= teg_open;
document.form.text.focus();
document.form.text.value+=teg_close;
</script>
<form name="form" action="index.php" method=POST>
<a href="#" onClick="javascript:bbcode('b');">B</a>
<textarea name="text"></textarea>
</form>

насколько видно, функция жс, а переменную code использует как пхпэшную. доллар убрать надо, я думаю.

Спустя 14 минут, 46 секунд (25.09.2009 - 09:03) stepan написал(а):
Да теперь то я знаю что ее не надо применять но мне было так легче определить что это переменная.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.