将MathJax插入ContentEditable div

use*_*712 5 contenteditable mathjax

我试图将一些MathJax代码插入到contentEditable div中,如下所示:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<meta charset=utf-8 />
  <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">      </script>

</head>
<body>
  <div id="editor" contentEditable="true" style="width:400px;height:400px;">
 </div>
Run Code Online (Sandbox Code Playgroud)

和JS

$(document).ready(function () {

  $('#editor').focus();

  var code = "\\alpha";

  var html = '<span id="_math"><script type="math/tex;mode=in-line">'+ code +'</script></span>';

  document.execCommand('insertHTML', false, html);

  MathJax.Hub.Queue(["Typeset", MathJax.Hub, '_math']);

});
Run Code Online (Sandbox Code Playgroud)

哪个呈现OK,但是一旦插入,元素就会冻结,无法进一步输入.有人可以在这里指出问题.

gol*_*ins 1

当内容发生变化时,需要调用MathJax。请参阅这个小提琴:http://jsfiddle.net/rfq8po3a/(注意,我必须在html中转义<and >)。

这是通过以下几件事实现的:

1) 将 MathJax 逻辑移至其自己的函数中,refreshMathJax该函数将重新填充标签和代码。

2)第一次加载页面时调用此函数,然后再次调用onBlur。

3) 清除焦点上的可编辑元素。如果没有这个,可编辑元素就无法轻松重用。您可以更改 onFocus 回调函数,以将 contentEditable html 替换为原始 LaTeX 内容。