使用 MathJax 向 DOM 添加元素

Using MathJax to add element to the DOM?

本文关键字:添加 元素 DOM MathJax 使用      更新时间:2023-09-26

我正在尝试动态创建一个元素,然后对其进行一些处理。我试图在新创建的元素上使用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)""

谢谢:)

这里的问题是 MathJax 是异步运行的,并且您尝试在 MathJax.Hub.getAllJax() 例程完全完成之前访问新元素。

要解决此问题,您可以将对Hub的调用放在CC_4的回调队列上的回调函数中:

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 文档。