我正在尝试动态创建一个元素,然后对其进行一些处理。我试图在新创建的元素上使用MathJax但我不能在其上拉MathJax.Hub.getAllJax。
我在控制台中输入了这个来测试:(MathOutput1在HTML中定义)
s.createReadStream("./resumable.js").pipe(res);
有没有办法可以动态创建一个我可以采取行动的元素?
我确实将div元素blah添加到dom中(至少根据chrome)" MathJax.HTML.addElement(document.body, "div", {id: "blah"}, ['` `']);
<div id="blah">` `</div>
MathJax.Hub.getAllJax("blah");
[]
MathJax.Hub.getAllJax("MathOutput1")
[Object]
&#34;
谢谢:)
答案 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。