在javascript中使用mathjax更新序列

gam*_*hen 2 html javascript updates mathjax

我的程序中有四个动态变量,

xzero, xone, xtwo, xthree
Run Code Online (Sandbox Code Playgroud)

这代表立方函数的系数.我想在HTML中显示实际的等式,格式如下:

xthree*x^3+xtwo*x^2+xone*x+xzero=f(x)
Run Code Online (Sandbox Code Playgroud)

但它需要能够用变量更新,所以我原本以为我会做一个

document.getElementById("demo").innerHTML = (new equation);
Run Code Online (Sandbox Code Playgroud)

但在我看来,mathJax无法在javascript中运行,或者我没有正确行事.我能想到的唯一替代解决方案是为每个变量制作四个单独的div标签,并将它们全部更新,但这似乎不必要地笨重.我可以得到一些方法来解决这个问题吗?

Ama*_*dan 6

MathJax在加载文档时会自动呈现文档,但不会在以后呈现.尝试显式请求重新渲染:

document.getElementById("demo").innerHTML = "...";
MathJax.Hub.Queue(["Typeset", MathJax.Hub, 'demo']);
Run Code Online (Sandbox Code Playgroud)

编辑:经过一番思考,我想你可以在一个元素中请求渲染,保持隐藏,然后将完成的标记复制到另一个元素中,以防止闪烁:

var mathDiv = document.getElementById('math');
var displayDiv = document.getElementById('display');

MathJax.Hub.Queue(["Typeset",MathJax.Hub,"math"]);
MathJax.Hub.Queue(function() {
  var math = MathJax.Hub.getAllJax("MathDiv")[0];
  var i = 1;
  setInterval(function() {
    MathJax.Hub.Queue(["Text", math, "\\int_0^{" + i + "} x dx"]);
    MathJax.Hub.Queue(function() {
      displayDiv.innerHTML = mathDiv.innerHTML;
    });
    i++;
  }, 1000);
});
Run Code Online (Sandbox Code Playgroud)
#math {
  display: none
}
Run Code Online (Sandbox Code Playgroud)
<script type="text/javascript"
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<div id="math">$$$$</div>
<div id="display"></div>
Run Code Online (Sandbox Code Playgroud)