在html

时间:2015-08-11 09:12:11

标签: javascript html mathjax

我想通过MathJax动态地在html文件中插入'LATEX'文本。

<html>
<head>
    <title>MathJax MathML Test Page</title>
    <script type="text/javascript"
        src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
    </script>
    <script type="text/x-mathjax-config">
        MathJax.Hub.Config({
                           tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]}
                           });
    </script>
</head>
<body>
    <div id="content" contenteditable="true" style="font-family: Helvetica">This is
    </div>
    <button onclick="myFunction()">Try it</button>
    <script>
    function myFunction() {
        var newP = document.createElement("p");
        newP.innerHTML = "\(ax^2 + bx + c = 0\)";
        my_div = document.getElementById("2");
        document.body.insertBefore(newP, my_div);
    }
    </script>
    <p id = '2'>
       \(ax^2 + bx + c = 0\)
    </p>
</body>

这段代码都做得很好:

<p id = '2'>
   \(ax^2 + bx + c = 0\)
</p>

但是当我动态插入新段落时,我看到错误的文字。 抱歉我的英语,但我实际上不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

试试这个:

function myFunction() {
  var newP = document.createElement("p");
  newP.id = 'unique-id';
  newP.innerHTML = "\\(ax^2 + bx + c = 0\\)";
  my_div = document.getElementById("2");
  document.body.insertBefore(newP, my_div);
  MathJax.Hub.Queue(['Typeset', MathJax.Hub, 'unique-id']);
}

一些评论:

  • 分隔符为\(\),但由于您将它们包含在Javascript字符串中,其中\是特殊的,因此您需要使用两个反斜杠;
  • 插入新的<p>元素后,您需要告诉MathJax对其进行排版,这是MathJax.Hub.Queue(...)的作用;它被赋予新创建元素的id,虽然这不是必需的(但 更快);请注意,id必须是唯一的;
  • 2的ID在HTML中无效;