Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.08.2013, 15:11
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Определить, находится ли каретка внутри ббкода
Подскажите, как определить, находиться ли каретка внутри ббкода?

Навскидку получилась функция isCaretInBBcode. Можно ли её упростить?

<input onclick="alert( isCaretInBBcode('a1','tag1') )"
         type="button" value="Проверить позицию каретки"
           style="margin-bottom: 10px; cursor: pointer;" />
<br />
<textarea id="a1" style="width: 400px; height: 100px;">
Lorem x ipsum [tag1]dolor x sit[/tag1] x amet, x and x consectetur [tag1]adipisicing x[/tag1] elit.

[tag1]x amet[/tag1], x and
</textarea>

<script>
function getCaretPosT(obj)         //Возвращает индекс текущего положения каретки в <textarea>
{                                  //  (из Сети)
    if (typeof obj != "object") obj = document.getElementById(obj);
    obj.focus();
    if (document.selection)                      //ie, opera
     { var s = document.selection.createRange();
       if (window.opera)                      //opera
		{ s.moveStart("character", -obj.value.length);
          return s.text.length;
        }
       else
        { var e = document.body.createTextRange(); //IE
          e.moveToElementText(obj);
          for (var p=0; e.compareEndPoints("StartToStart", s)<0; p++)
           { e.moveStart('character', 1); }
          return p;
		}
     }
    else if (obj.selectionStart || obj.selectionStart=="0") return obj.selectionStart;
}

function isCaretInBBcode(obj,tag)  // Функция, возвращающая true, если каретка (в textarea)
{                                  //  находится внутри ббкода (аргумент tag)
    var obj = document.getElementById(obj),
        str = obj.value,
        Caret = getCaretPosT(obj),
        L = tag.length,
        reg = "\\["+tag+"\\]([\\s\\S]*?)\\[\\/"+tag+"\\]",
        BBcode = obj.value.match( new RegExp(reg,"g") ),
        Length = (BBcode) ? BBcode.length : 0,
        count = 0;
         
    for (var i=0; i<Length; i++)
     { var a = str.indexOf(BBcode[i]) + count,
           b = a + BBcode[i].length;
       if (Caret > a+L+1 && Caret < b-L-2) return true;
       count += BBcode[i].length;
       str = str.replace(BBcode[i],'');
     }
     
    return false;
}
</script>

Последний раз редактировалось Demath, 18.08.2013 в 19:26. Причина: Опечатки в коде
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как добавить class картинке которой находиться внутри $(this)? Андрей Лебедев Элементы интерфейса 3 10.02.2013 06:06
как добавить class картинке которой находиться внутри $(this)? Андрей Лебедев Events/DOM/Window 1 10.02.2013 04:49