javascript - 使用 jQuery 加载内容后渲染 MathJax
问题描述
我将一些包含 jQuery 数学的内容加载到我的 html 文件中。现在我想让 Mathjax 排版这个新内容,但它不起作用。这就是我的 JavaScript 代码的样子
<script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
<script>
$(document).ready(function(){
$("#newContent").click(function(){
$("#content").load("{% static 'newContent.txt' %}");
MathJax.typeset();
});
});
</script>
但它只加载内容而不应用 MathJax。有什么建议为什么它不起作用?
编辑我添加了第二个带有第二次点击功能的按钮,它运行以下脚本
<script>
function myfunction(){
MathJax.typeset();
}
</script>
如果我单击第一个按钮,则它会加载新内容而不应用 MathJax。如果我现在单击第二个按钮,它会将 MathJax 应用于新内容。这告诉我可以将 MathJax 应用于我加载的内容,但是,到目前为止,加载新内容并一键排版并不起作用。
解决方案
这是因为load
发送了一个异步的AJAX请求。这意味着有可能(并且很可能)调用后的代码在load
服务器发送响应之前执行。在上面的例子中,调用load
启动一个异步请求,然后调用MathJax.typeset()
在页面上仍然没有数学运算时运行,所以什么也没有发生。最后,load
请求完成,加载数学内容。
为了确保在加载数学后进行排版,调用MathJax.typeset
必须发生在提供给load
调用的回调函数中。根据jQuery 文档中的示例,这看起来像
$("#content").load("{% static 'newContent.txt' %}", () => MathJax.typeset());
您可以通过在数组中提供其 id 来让 MathJax 知道要呈现哪个元素:
$("#content").load("{% static 'newContent.txt' %}", () => MathJax.typeset(['content']));
推荐阅读
- java - JSONArrayRequest 没有响应或错误响应
- cmake - 完成 protobuf_generate 后运行命令
- python - Matplotlib fontproperties 仅更改第一个轴刻度
- android - Android AlarmManager 通过时区或夏令时进行调度
- blazor - 从动态创建的 Blazor 组件订阅事件,以便调用页面可以执行某些操作
- python - 使用小型 ConvLSTM 模型获取 OOM
- kubernetes - Kubernetes 指标服务器 API
- apache-kafka - 一分钟聚合窗口在 Kafka 2.4.0 中给出了意想不到的结果
- python - 等到元素中的文本被更改
- elasticsearch - 在 Elasticsearch 6.6 中将“父”转换为“子”