2013-05-13 3 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> 

ответ

1

Я был в состоянии заставить восстановление путем установки innerHTML из сНа элемента:

myDiv.innerHTML = b.outerHTML; 

Demonstration (нажмите на кнопку "Выполнить на JS")

it works only on some browsers Конечно.

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, это более интересный ответ, чем мой. –