2013-05-13 69 views
2

具體而言(MathJax不是我正在尋找的)我有一個帶有一些MathML的網頁。「FireFox」瀏覽器很好地解析它,但是當我嘗試通過javascript添加相同的代碼時, ?噸解析我it.How可以通知瀏覽器再次解析網頁的內容即使是在其他一些語言不是JavaScript 下面是javascript代碼:如何強制瀏覽器再次解析MathML內容?

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> 

回答

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()與您創建的其他節點方式的一致性的例子。

+0

+1,這是比我更有趣的答案。 – 2013-05-15 15:42:49