我需要MathJax再次检查我的所有页面。
我的意思是在创建页面时它确实很棒。但是我需要在window.onload之后调用它来重新解析页面,因为它的内容在此期间已经发生了变化。
我该怎么做?
答案 0 :(得分:42)
请参阅http://docs.mathjax.org/en/latest/advanced/typeset.html:
如果您正在编写动态网页 其中包含数学的内容 可能会出现在MathJax之后 排版页面的其余部分,然后你 需要告诉MathJax寻找 数学在页面再次出现时 生成新内容。去做 那,你需要使用
MathJax.Hub.Typeset()
方法。这个 将导致预处理器(如果有的话) 被加载)在页面上运行 再次,然后MathJax将寻找 页面上未经处理的数学 并排版它,保持不变 已经排版的数学。但是,您不应该直接调用此方法。 [你应该]排版排版操作,[使用此命令]:
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
在这里演示:http://cdn.mathjax.org/mathjax/latest/test/sample-dynamic.html
答案 1 :(得分:4)
我发现使用MathML进行动态更新的最简单方法是让MathJax进行内容更改(而不是jQuery .html(s)函数,例如)然后它在更改内容时处理数学。
<script type="text/javascript">
function updateMathContent(s) {
var math = MathJax.Hub.getAllJax("mathdiv")[0];
MathJax.Hub.Queue(["Text", math, s]);
}
</script>
...
<div id="mathdiv">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
</math>
</div>
所以只需使用该函数用新的MathML替换div的全部内容即可。 (脚本在脑海里。)
注意:如果您有一个空的math div并稍后添加MathML,则会出现脚本错误。但是如果数学标签中没有任何内容,则对updateMathContent的调用将起作用。