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

Тема в разделе "Другие языки", создана пользователем Orbit, 3 июн 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. Orbit

    Orbit Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    145
    Симпатии:
    74
    Нужно было сделать кнопочки, чтобы по клику на них выделенный в 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
    
     
  2. tarantas

    tarantas Постоялец

    Регистр.:
    22 мар 2008
    Сообщения:
    75
    Симпатии:
    14
    Код:
    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];
          }
      }
     
    Orbit нравится это.
  3. Orbit

    Orbit Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    145
    Симпатии:
    74
    Проверил, все работает отлично. Спасибо :ay:
     
Статус темы:
Закрыта.