使用MathJax将元素添加到DOM?

时间:2016-02-01 18:21:04

标签: javascript mathjax

我正在尝试动态创建一个元素,然后对其进行一些处理。我试图在新创建的元素上使用MathJax但我不能在其上拉MathJax.Hub.getAllJax。

我在控制台中输入了这个来测试:(MathOutput1在HTML中定义)

s.createReadStream("./resumable.js").pipe(res);

有没有办法可以动态创建一个我可以采取行动的元素?

我确实将div元素blah添加到dom中(至少根据chrome)&#34; MathJax.HTML.addElement(document.body, "div", {id: "blah"}, ['` `']); <div id=​"blah">​` `​</div>​ MathJax.Hub.getAllJax("blah"); [] MathJax.Hub.getAllJax("MathOutput1") [Object] &#34;

谢谢:)

1 个答案:

答案 0 :(得分:2)

此处的问题是MathJax operates asynchronously,您在MathJax.Hub例程完成之前尝试访问新元素。

要解决此问题,您可以将来自MathJax.Hub.getAllJax() 回调队列的回调函数中的Hub拨打电话:

function showBlahElement () {
    console.log(MathJax.Hub.getAllJax("blah"));
}

MathJax.HTML.addElement(document.body, "div", {id: "blah"}, ['$$a=b$$']);
MathJax.Hub.Queue(showBlahElement);

或者,你可以注册一个信号监听器,只要某个事件发生就会被触发(在这种情况下,每当新数学被排版时):

MathJax.Hub.Register.MessageHook("New Math", function (message) {
  console.log(MathJax.Hub.getAllJax("blah"));
});

MathJax.HTML.addElement(document.body, "div", {id: "blah"}, ['$$a=b$$']);

有关详细信息,请参阅API docs