【发布时间】:2011-07-09 04:53:07
【问题描述】:
我需要 MathJax 重新检查我的所有页面。
我的意思是,当页面被创建时,一切都很好。但是我需要在 window.onload 之后调用它来重新解析页面,因为它的内容同时发生了变化。
我该怎么做?
【问题讨论】:
标签: javascript html restart mathjax
我需要 MathJax 重新检查我的所有页面。
我的意思是,当页面被创建时,一切都很好。但是我需要在 window.onload 之后调用它来重新解析页面,因为它的内容同时发生了变化。
我该怎么做?
【问题讨论】:
标签: javascript html restart mathjax
见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
【讨论】:
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
Rerender,Reprocess
我发现使用 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>
因此,只需使用该函数将 div 的全部内容替换为新的 MathML 即可。 (脚本在头脑中。)
注意:如果您有一个空的数学 div 并稍后添加 MathML,您将收到脚本错误。但是,如果数学标签在对 updateMathContent 的调用中没有任何内容,则将起作用。
【讨论】: