Распознавать при написании между двумя знаками $$

У меня есть текстовое поле, в котором я пишу текст.

Для простоты я хочу, чтобы alert('Boom!') выскакивало каждый раз, когда я начинаю писать между двумя $$.

Например, у меня есть пустое текстовое поле, и я начинаю печатать (курсор - это знак «|»)

Today is a really nice day|

ничего не происходит, начните печатать

Today is a really nice day, $|$

все еще ничего, но теперь, когда я начинаю печатать

Today is a really nice day, $someText|$

окно предупреждения должно выскакивать для каждой буквы между этими знаками доллара.

Зачем мне такая функция? Я хочу, чтобы предварительный просмотр уравнения в реальном времени (рендеринг MathJax) каждый раз, когда пользователь начинает вводить свое уравнение, и я могу распознать это уравнение по знакам $$ (все, что между ними, отображается).

EDIT: в текстовом поле можно использовать несколько символов $$. Скрипт должен распознать тот, который в данный момент активен (курсор находится между его $$).


person svenkapudija    schedule 10.03.2012    source источник
comment
что вы пробовали до сих пор? покажи нам свой код?   -  person Ghostman    schedule 11.03.2012
comment
звучит как работа для регулярных выражений   -  person Rich    schedule 11.03.2012
comment
@soul У меня их нет, потому что я действительно не знаю, с чего начать (кроме ручной проверки символов вперед и назад и перехвата «$», если они найдены, но что, если у меня есть текстовое поле с более чем несколькими тысячами символов и нет $$ в нем вообще).   -  person svenkapudija    schedule 11.03.2012
comment
@j_mcnally Как я могу использовать его в отношении позиции курсора?   -  person svenkapudija    schedule 11.03.2012
comment
@svenkapudija использует функцию keyup и находит знак $   -  person Ghostman    schedule 11.03.2012
comment
@soul Добавлена ​​часть EDIT. Может быть что-то вроде: 1.) найти первый $ 2.) найти второй $ (одна пара) 3.) проверить, находится ли положение курсора между ними, если да, скопируйте этот текст, иначе повторите процесс. Но, как я уже сказал, проблема с производительностью (потому что это будет вызываться при каждом нажатии клавиши)?   -  person svenkapudija    schedule 11.03.2012
comment
$(f1Selector).on(change keyup mouseup cut paste, function() { что-то вроде этого?   -  person Ghostman    schedule 11.03.2012


Ответы (1)


Вы можете использовать плагин jQuery Caret

http://examplet.buss.hk/download/download.php?plugin=caret.1.01

примечание: отредактируйте и удалите эти символы Ôªø из строки 8

и replace функция. (не заменять что-либо, а использовать индекс совпадающего шаблона)

$("#myText").bind("keyup", function(e){
     var text = $(this).val();
     var caret = $(this).caret().start;

     if(text && text.length > 0){
        text.replace(/\$.*?\$/g, function(m, n){
           if(caret > n && caret < (n + m.length)){
              alert("BOOM");
           }
        });
     }
});

демо: http://jsfiddle.net/xqXXb/

Просто показываю как это сделать. Вы можете улучшить это.

использовать

$("#myText").bind("keyup keydown change", function(e){ ...

для лучшего результата.

person Diode    schedule 10.03.2012
comment
Оно работает! Но только для первого случая. Если я продолжаю писать и после первой пары $$ добавляю еще одну - она ​​вообще не распознается. Может быть, сделать какую-нибудь рекурсию с текстом после первой пары (если в нем нет знака вставки)? - person svenkapudija; 11.03.2012
comment
Работает как шарм (связан с stackoverflow.com/questions/ 7925622/). Спасибо. - person svenkapudija; 11.03.2012
comment
Кроме того, в качестве бонуса, как искать (какое регулярное выражение) то же самое, но вместо $ и $ знаки будут [ и ] ? У меня проблемы с побегом от них. Он используется в MathJax для центрированных, разделенных уравнений. - person svenkapudija; 11.03.2012
comment
просто замените $, чтобы он стал /\[.*?\]/g - person Diode; 11.03.2012
comment
О, я не заметил, что SO также ускользнул от них. Это должно быть \[ и \]. - person svenkapudija; 11.03.2012