2

具体来说(MathJax 不是我要找的)我有一个网页,里面有一些 MathML。“FireFox”浏览器可以很好地解析它,但是当我尝试通过 javascript 添加相同的代码时,它不会解析它。如何通知浏览器再次解析网页的内容?即使它是 javascript 以外的其他语言 这里是 javascript 代码:

    var b=document.createElement("math");
    b.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML");
    var msup=document.createElement("msup");
    var c=document.createElement("mi");
    c.innerHTML="c";
    var p=document.createElement("mn");
    p.innerHTML="6";
    msup.appendChild(c);
    msup.appendChild(p);
    b.appendChild(msup);
    document.body.appendChild(b);

这是它生成的 HTML

    <math xmlns="http://www.w3.org/1998/Math/MathML">
    <msup>
    <mi>c</mi>
    <mn>6</mn>
    </msup>
    </math>
4

2 回答 2

2

您需要使用document.createElementNS()而不是document.createElement()为了在正确的命名空间中创建元素。事后设置xmlns属性实际上并没有这样做。所以这是一个对我有用的例子

<!DOCTYPE html>
<html>
<head>
<title>Test adding MathML</title>
</head>
<body>
<script>
var MML = "http://www.w3.org/1998/Math/MathML";
var b=document.createElementNS(MML,"math");
var msup=document.createElementNS(MML,"msup");
var c=document.createElementNS(MML,"mi");
c.appendChild(document.createTextNode("c"));
var p=document.createElementNS(MML,"mn");
p.appendChild(document.createTextNode("6"));
msup.appendChild(c);
msup.appendChild(p);
b.appendChild(msup);
document.body.appendChild(b);
</script>
</body>
</html>

为了与您创建其他节点的方式保持一致, 我还将您的使用切换innerHTML为使用。document.createTextNode()

于 2013-05-14T10:26:39.990 回答
1

我能够通过设置 div 元素的 innerHTML 来强制重建:

myDiv.innerHTML = b.outerHTML;

演示(点击“在 JS 上运行”)

当然它只适用于某些浏览器

于 2013-05-13T13:13:35.703 回答