【问题标题】:Recognize when writing in between two $$ signs在两个 $$ 符号之间书写时识别
【发布时间】:2012-03-27 20:04:39
【问题描述】:

我有一个文本字段,我正在其中写一些文本。

为了简单起见,我希望alert('Boom!') 在我每次开始写在两个 $$ 之间时跳出。

例如,我有一个空白文本字段并开始输入(光标为“|”符号)

Today is a really nice day|

什么都没有发生,开始输入

Today is a really nice day, $|$

什么都没有,但是现在当我开始打字时

Today is a really nice day, $someText|$

对于这些美元符号之间的每个字母,应该跳出警告框。

为什么我需要这种功能?每次用户开始输入他/她的方程时,我都想要实时方程预览(MathJax 渲染),并且我可以通过 $$ 符号识别它是一个方程(中间的所有内容都被渲染)。

编辑: 文本字段中可以有多个 $$。脚本必须识别当前处于活动状态的那个(光标位置在 $$ 之间)。

【问题讨论】:

  • 到目前为止你尝试过什么?给我们看看你的代码?
  • 听起来像是正则表达式的工作
  • @soul 我没有,因为我真的不知道从哪里开始(除了手动逐个字符地向前和向后检查字符并捕获'$',如果有的话,但是如果我有textarea 有几千个字符,根本没有 $$)。
  • @j_mcnally 我如何将它与光标位置相关联?
  • @svenkapudija 使用 keyup 功能并找到 $ 符号

标签: jquery mathjax


【解决方案1】:

您可以使用 jQuery 插入符号插件

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){ ...

为了更好的结果。

【讨论】:

  • 有效!但仅限于第一次出现。如果我继续写作并在第一对 $$ 之后添加另一个 - 它根本无法识别。也许在第一对之后对文本进行一些递归(如果在其中找不到插入符号)?
  • 用作魅力(与stackoverflow.com/questions/7925622/… 连接)。谢谢。
  • 另外,作为“奖励”,如何搜索(哪个正则表达式)相同的东西,而不是 $ 和 $,符号将是 [ 和 ] ?我有逃避这些的问题。它在 MathJax 中用于居中、分离的方程。
  • 只需替换$,就变成/\[.*?\]/g
  • 哦,我没有注意到 SO 也逃脱了他们。它应该是 \[ 和 \]。
猜你喜欢
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 2021-12-07
  • 2023-03-22
  • 2016-02-19
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
相关资源
最近更新 更多