使用 MathJax 将元素添加到 DOM?

Using MathJax to add element to the DOM?

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

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

MathJax.HTML.addElement(document.body, "div", {id: "blah"}, ['` `']);
<div id=​"blah">​` `​</div>​
MathJax.Hub.getAllJax("blah");
[]
MathJax.Hub.getAllJax("MathOutput1")
[Object]

有没有一种方法可以动态创建我可以操作的元素?

我确实确认 div 元素 blah 已添加到 dom(至少根据 chrome)“”。 =12=]

谢谢:)

这里的问题是 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