Javascript вставка тегов в textarea

Статус
В этой теме нельзя размещать новые ответы.

Orbit

Гуру форума
Регистрация
2 Апр 2007
Сообщения
145
Реакции
75
Нужно было сделать кнопочки, чтобы по клику на них выделенный в textarea текст был окружен тегами (типа b, p, i).
Нашел вариант (ниже), но для кириллицы он работать отказывается, так же как и если в тексте встречаются некоторые недружественные ему символы. Подскажите, пож-та, может есть вариант для того, чтоб с любыми символами в textarea работало, или может в этом что-то добавить.
Код:
function getSelection(ta)
  { var bits = [ta.value,'','','']; 
    if(document.selection)
      { var vs = '#$%^%$#';
        var tr=document.selection.createRange()
        if(tr.parentElement()!=ta) return null;
        bits[2] = tr.text;
        tr.text = vs;
        fb = ta.value.split(vs);
        tr.moveStart('character',-vs.length);
        tr.text = bits[2];
        bits[1] = fb[0];
        bits[3] = fb[1];
      }
    else
      { if(ta.selectionStart == ta.selectionEnd) return null;
        bits=(new RegExp('([\x00-\xff]{'+ta.selectionStart+'})([\x00-\xff]{'+(ta.selectionEnd - ta.selectionStart)+'})([\x00-\xff]*)')).exec(ta.value);
      }
     return bits;
  }
function matchPTags(str)
  { str = ' ' + str + ' ';
    ot = str.split(/\[[b|i|p].*?\]/i);
    ct = str.split(/\[\/[b|i|p].*?\]/i);
    return ot.length==ct.length;
  }
function addPTag(ta,pTag)
  { bits = getSelection(ta);
    if(bits)
      { if(!matchPTags(bits[2]))
          { alert('\t\tInvalid Selection\nSelection contains unmatched opening or closing tags.');
            return;
          }
        ta.value = bits[1] + '<' + pTag + '>' + bits[2] + '</' + pTag + '>' + bits[3];
      }
  }
</script>
и используем так:
<a href="javascript:addPTag(document.getElementById('text'),'b')">BOLD</a>
где text - соответственно айди textarea
 
Код:
function getSelection(ta)
  { var bits = [ta.value,'','','']; 
    if(document.selection)
      { var vs = '#$%^%$#';
        var tr=document.selection.createRange()
        if(tr.parentElement()!=ta) return null;
        bits[2] = tr.text;
        tr.text = vs;
        fb = ta.value.split(vs);
        tr.moveStart('character',-vs.length);
        tr.text = bits[2];
        bits[1] = fb[0];
        bits[3] = fb[1];
      }
    else
      { if(ta.selectionStart == ta.selectionEnd) return null;
        bits=(new RegExp('(.{'+ta.selectionStart+'})(.{'+(ta.selectionEnd - ta.selectionStart)+'})(.*)')).exec(ta.value);
      }
     return bits;
  }
function matchPTags(str)
  { str = ' ' + str + ' ';
    ot = str.split(/\[[b|i|p].*?\]/i);
    ct = str.split(/\[\/[b|i|p].*?\]/i);
    return ot.length==ct.length;
  }
function addPTag(ta,pTag)
  { bits = getSelection(ta);
    if(bits)
      { if(!matchPTags(bits[2]))
          { alert('\t\tInvalid Selection\nSelection contains unmatched opening or closing tags.');
            return;
          }
        ta.value = bits[1] + '<' + pTag + '>' + bits[2] + '</' + pTag + '>' + bits[3];
      }
  }
 
Проверил, все работает отлично. Спасибо :ay:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху