[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Форматирование текста в textarea
dron4ik
Продвигаюсь дальше в JS и вот освоив форматирование текста в iframe переметнулся на textarea.

через document.selection.createRange() форматирую текст, все красива, но,

Цитата
вв<b>вввв<i>ввв</b>ввв</i>вв


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

Цитата
вв
<b>
<i>ввв</i>
вв


и самое обидное что так в базу и будет писаться(

Как правильно составить запрос гуглу чтобы понять как такое править?

Была идея перед записью в базу запихнуть в скрытую дивку, потом достать обратно, а потом уже писать, но такой костыль, хоть и легок в реализации, но дурацкий по своему определению)))

_____________
Ex3m.com.ua — Активный образ жизни
redreem
форматирование в textarea???
непонял что ты хочешь.
ты форматируешь типа как в WISYWIG редакторах, текст внутри дивки... ну ок. innerHTML из дивки так и пиши в базу. или что не так?
dron4ik
redreem
Та нет, как в редакторе этого форума, просто я вместо [] использовал <>.


dddddddddddddddd

только что сделал на этом форуме

_____________
Ex3m.com.ua — Активный образ жизни
redreem
ну что тебя смущает?
dron4ik
redreem
попробуй повторить, или посмотреть цитату.

_____________
Ex3m.com.ua — Активный образ жизни
redreem
т.е. ты хочешь при редактировании иметь отформатированный вид, а не тэги?
так я про это в 1 месаге и говорил - показывать юзеру надо не текстареа, а дивку с форматированным текстом. в текстареа так не будет показываться.
dron4ik
redreem
та я хочу чтобы в textarea был правельный HTML
вместо
вв<b>вввв<i>ввв</b>ввв</i>вв
такой
вв<b>вввв<i>ввв</i></b><i>ввв</i>вв

а именно меня интересует есть ли такая возможность вообще?

я прекрасно понимаю что такое textarea и что в нем теги а не картинки)

_____________
Ex3m.com.ua — Активный образ жизни
redreem
ааа, пересечение тэгов чтоли?
а как у тебя вообще такое получается (кроме как принудительного забивания руками)?
это не точно не красиво - это ошибка! smile.gif если ты это от юзеров принимаешь, ну распарсивай и валидируй на подобное smile.gif
dron4ik
Цитата
<form>
<textarea id="textarea" cols="50" rows="5"></textarea>
<br>
<a href="#" onclick="add_tags('<b>', '</b>'); return false;">b</a>
<a href="#" onclick="add_tags('<i>', '</i>'); return false;">i</a>
</form>


<script language=JavaScript>
function add_tags(str1, str2)
{
    var obj=document.getElementById("textarea");
    obj.focus();
   
    if(document.selection)
    {
      var s = document.selection.createRange();         
      s.text = str1 + s.text + str2;               
    }else{
      var len = obj.value.length;
      var start = obj.selectionStart;
      var end = obj.selectionEnd;
      var scrollTop = obj.scrollTop;
      var scrollLeft = obj.scrollLeft;
      var sel = obj.value.substring(start, end);
      var rep = str1 + sel + str2;
      obj.value =  obj.value.substring(0,start) + rep + obj.value.substring(end,len);
      obj.scrollTop = scrollTop;
      obj.scrollLeft = scrollLeft; 
    }
}
</script>


вот и я о том что не красиво, та и + к примеру закрывающийся тег могли случайно дропнуть, и прощай версточка(((

_____________
Ex3m.com.ua — Активный образ жизни
redreem
ну типа так:

function check_cross(str) {
var pairs = {
0:{ 0:'<b>', 1:'</b>' },
1:{ 0:'<i>', 1:'</i>' }
}
;
for (var i in pairs) {
var ind1 = str.indexOf(pairs[i][0]);
var ind2 = str.indexOf(pairs[i][1]);
if ((ind1 > 0 && ind2 < ind1) || (ind2 > 0 && ind1 < 0)) {
return true;
}
}

return false;
}

function add_tags(str1, str2) {
var obj=document.getElementById("textarea");
obj.focus();
if(document.selection) {
var s = document.selection.createRange();
if (check_cross(s.text)) {
alert('Руки оторву!');
} else {
s.text = str1 + s.text + str2;
}
}
else {
var len = obj.value.length;
var start = obj.selectionStart;
var end = obj.selectionEnd;
var scrollTop = obj.scrollTop;
var scrollLeft = obj.scrollLeft;
var sel = obj.value.substring(start, end);
if (check_cross(sel)) {
alert('Руки оторву!');
} else {
var rep = str1 + sel + str2;
obj.value = obj.value.substring(0,start) + rep + obj.value.substring(end,len);
obj.scrollTop = scrollTop;
obj.scrollLeft = scrollLeft;
}
}
}


только надо погонять чек_кросс(), я для примера написал, она в таком виде будет не всегда правильно отрабатывать.
Быстрый ответ:

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