как вариант, не идеален, но лучше я пока не придумал
function pastTags(text1, text2){
var elrms = document.getElementsByTagName('textarea');
if(elrms.length > 1){
var curr = 0;
for(i=0; i<elrms.length; i++){
if(document.getElementsByTagName('textarea')[i].selectionEnd > 0){
curr = i;
}
}
}else{
curr = 0;
}
var Textarea = document.getElementsByTagName('textarea')[curr];
var rangeStart = Textarea.selectionStart;
var rangeEnd = Textarea.selectionEnd;
var formText = Textarea.value;
var selectionLenght = rangeEnd - rangeStart;
if(text2!=' '){
var newText = formText.substr(0, rangeStart)+text1+formText.substr(rangeStart, selectionLenght)+text2+formText.substr(rangeStart + selectionLenght);
}else{
var newText = formText.substr(0, rangeEnd)+text1+text2+formText.substr(rangeEnd + selectionLenght);
}
Textarea.value = newText;
var moveRange = 0;
moveRange = rangeEnd+text1.length+text2.length;
Textarea.setSelectionRange(moveRange, moveRange);
}
работает точно лучше чем местный ужас
сорри, накосячил мальца с обрезкой
исправленный вариант, годится для тегов и смайлов
function pastTags(text1, text2){
var elrms = document.getElementsByTagName('textarea');
if(elrms.length > 1){
var curr = 0;
for(i=0; i<elrms.length; i++){
if(document.getElementsByTagName('textarea')[i].selectionEnd > 0){
curr = i;
}
}
}else{
curr = 0;
}
var Textarea = document.getElementsByTagName('textarea')[curr];
var rangeStart = Textarea.selectionStart;
var rangeEnd = Textarea.selectionEnd;
var formText = Textarea.value;
var selectionLenght = rangeEnd - rangeStart;
if(text2!=' ' && text2!=''){
var newText = formText.substr(0, rangeStart)+text1+formText.substr(rangeStart, selectionLenght)+text2+formText.substr(rangeStart + selectionLenght);
}else{
var newText = formText.substr(0, rangeEnd)+text1+text2+formText.substr(rangeEnd);
}
Textarea.value = newText;
if(text2.length > 1 && selectionLenght == 0){
var moveRange = rangeStart+text1.length+selectionLenght;
}else{
var moveRange = rangeEnd+text1.length+text2.length;
}
Textarea.setSelectionRange(moveRange, moveRange);
}
# venom (11.01.2014 / 00:46)
Это более для Джона подходит , да и адаптация не сложная
http://www.sceditor.com/
После его установки. Все работает отлично. Тоесть все как нужно.
Но есть одно НО!!!
После двух раз обновлений страницы на форуме к примеру где стоит этот редактор прикрепленный к форуму.
Срабатывает постоянно защита на то Что превышено колличество запросов к сайту!
Понять не могу почему она срабатывает. Ведь скрипт не должен давать сильной нагрузки на сайт?!
blackvj, Честно не замечал такого , писал еще на Version 1.4.2 , щас не знаю что и сказать...
venom, Просто срабатывает защита от нагрузки почему-то...
Использую сейчас WysiBB.
ramzes, поставил твой код... как было так и осталось. Нечего не изменилось
WysiBB - тоже херня... кодеры забросили его и куча мелких багов это ппц.
blackvj, как ты ставил и как используешь? он работает, как я написал
ramzes, Функция вот
function test($form, $field){
<script language="JavaScript" type="text/javascript">
function tag(text1, text2){
var elrms = document.getElementsByTagName(\'textarea\');
if(elrms.length > 1){
var curr = 0;
for(i=0; i<elrms.length; i++){
if(document.getElementsByTagName(\'textarea\').selectionEnd > 0){
curr = i;
}
}
}else{
curr = 0;
}
var Textarea = document.getElementsByTagName(\'textarea\')[curr];
var rangeStart = Textarea.selectionStart;
var rangeEnd = Textarea.selectionEnd;
var formText = Textarea.value;
var selectionLenght = rangeEnd - rangeStart;
if(text2!=\' \' && text2!=\'\'){
var newText = formText.substr(0, rangeStart)+text1+formText.substr(rangeStart, selectionLenght)+text2+formText.substr(rangeStart + selectionLenght);
}else{
var newText = formText.substr(0, rangeEnd)+text1+text2+formText.substr(rangeEnd);
}
Textarea.value = newText;
if(text2.length > 1 && selectionLenght == 0){
var moveRange = rangeStart+text1.length+selectionLenght;
}else{
var moveRange = rangeEnd+text1.length+text2.length;
}
Textarea.setSelectionRange(moveRange, moveRange);
}
</script>
<a href="javascript:tag(\'[url=http://]\', \'название[/url]\', \'\')"><img src="../images/bb/link.png" border="0" alt="url" title="Ссылка" /></a>
<a href="javascript:tag(\'\', \'\', \'\')"><img src="../images/bb/b.png" border="0" alt="b" title="Жирный"/></a>
<a href="javascript:tag(\'[i]\', \'\', \'\')"><img src="../images/bb/i.png" border="0" alt="i" title="Наклонный"/></a>
<a href="javascript:tag(\'\', \'\', \'\')"><img src="../images/bb/u.png" border="0" alt="u" title="Подчёркнутый"/></a>
<a href="javascript:tag(\'\', \'\', \'\')"><img src="../images/bb/s.png" border="0" alt="s" title="Перечёркнутый"/></a>
<a href="javascript:tag(\'\', \'
\', \'\')"><img src="../images/bb/quote.png" border="0" alt="quote" title="Цитата"/></a>
return $out . '<br />';
}
Вывод вот
echo '<form name = "add" action="?act=editpost&id=' . $id . '&start=' . $start . '" method="post">';
echo '<textarea cols="' . $set_forum['farea_w'] . '" rows="' . $set_forum['farea_h'] . '" name="msg">' . htmlentities($res['text'], ENT_QUOTES, 'UTF-8') . '</textarea><br/>';
echo test('add', 'msg');
echo '<textarea cols="' . $set_forum['farea_w'] . '" rows="' . $set_forum['farea_h'] . '" name="er">' . htmlentities($res['text'], ENT_QUOTES, 'UTF-8') . '</textarea><br/>';
echo test('add', 'er');
Пробывал также textarea менять на параметр field тоже не работает.