Продвигаюсь дальше в JS и вот освоив форматирование текста в iframe переметнулся на textarea.
через document.selection.createRange() форматирую текст, все красива, но,
Цитата |
вв<b>вввв<i>ввв</b>ввв</i>вв |
Цитата |
вв <b> <i>ввв</i> вв |
Цитата |
<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> |
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;
}
}
}