在网页上写数学公式怎么少得了MathJax. 然而这玩意因为功能复杂所以比showdown之类的库要难配置一些.
首先从Github上把它clone下来. 然后发现这玩意真的好大. 后来发现是有一堆迷之png.
别人家的cdn的速度从我这来看都不怎么样, 所以还是只能扔到自已的server上.
最简单的用法就是在html head里加一行
<script src='xxx/MathJax.js?config=default'></script>
然后它就会用默认配置在网页加载的时候把那些玩意给转换了.
这里有一个config
的文件可以选择. 在unpacked
里的default.js
里有很详细的说明. (虽然是英文的)
看上去能用了? 然后问题来了. 我的前端是先加载网页框架, 再用js去加载内容, 然而内容加载出来的时候MathJax已经把活干完歇菜了. 显然应该有什么控制单元能随时更新某个element. google了一下发现MathJax有个子类控制单元叫Hub. Hub有个方法叫Typeset
, 能重新检查页面.
于是这么写?
$.post("xxx", {xx}, function(res) {
$("#xxx").html(res.content);
MathJax.Hub.Typeset();
});
然而这样的话是不是我每加载一个listitem
或者comment
都要重新扫一遍整个页面啊? 卡死啦.
于是加了个triggerCount
. 麻烦死了.
然后想想觉得没对, 肯定能直接改某个元素啊. 仔细看看document.
Typeset([element[, callback]])
对啊ovo可以直接指定element. 而且还各种类型都资瓷. 在类型这种问题上js比c高到不知道哪里去了.
于是代码写成
$.post("xxx", {xx}, functoin(res) {
$("#xxx").html(res.content);
MathJax.Hub.Typeset(getMyId());
});
搞定啦.
然后config里还可以指定是用$$
还是$
之类的玩意.
然后似乎MathJax还自带Async
一类的玩意?
感觉很赞.