2016-02-01 4 views
1

Я пытаюсь динамически создать элемент, а затем обработать его. Я пытался использовать MathJax для этого вновь созданного элемента, но я не могу вытащить MathJax.Hub.getAllJax.Использование MathJax для добавления элемента в DOM?

я напечатал это в консоли, чтобы проверить вещи: (MathOutput1 определяется в HTML)

MathJax.HTML.addElement(document.body, "div", {id: "blah"}, ['` `']); 
<div id=​"blah">​` `​</div>​ 
MathJax.Hub.getAllJax("blah"); 
[] 
MathJax.Hub.getAllJax("MathOutput1") 
[Object] 

Есть ли способ я могу динамически создать элемент, который я могу действовать дальше?

Я действительно подтвердил, что элемент DIV мля был добавлен в йот (по крайней мере, в соответствии с хромом) «»

Спасибо :)

+0

Я мог ошибаться, но вам, возможно, придется набирать элемент, прежде чем вы сможете его восстановить. Что-то вроде 'MathJax.Hub.Queue (['Typet', MathJax.Hub, getElementById ('blah')]);' – Andreas

ответ

2

Проблема здесь состоит в том, что MathJax operates asynchronously, и вы пытаетесь для доступа к новому элементу до того, как процедуры MathJax.Hub будут полностью завершены.

Чтобы обойти эту проблему, вы можете поставить вызов MathJax.Hub.getAllJax() в функции обратного вызова на очередь по Hub «s обратного вызова:

function showBlahElement() { 
    console.log(MathJax.Hub.getAllJax("blah")); 
} 

MathJax.HTML.addElement(document.body, "div", {id: "blah"}, ['$$a=b$$']); 
MathJax.Hub.Queue(showBlahElement); 

Или, вы можете зарегистрировать слушательсигнала, который получит срабатывает всякий раз, когда определенное событие происходит (в этом случае, когда новая математика набрана):

MathJax.Hub.Register.MessageHook("New Math", function (message) { 
    console.log(MathJax.Hub.getAllJax("blah")); 
}); 

MathJax.HTML.addElement(document.body, "div", {id: "blah"}, ['$$a=b$$']); 

Для получения дополнительной информации см API docs.

+0

С последней версией MathJax в любом случае вам нужно вставить еще одну строку в первый фрагмент: 'MathJax.HTML.addElement (...);' 'MathJax.Hub.Queue ([" Typet ", MathJax.Hub," blah "]);' 'MathJax.Hub.Queue (showBlahElement);' Без команды '' Setet' getAllJax возвращает пустой массив. Попробуйте: https://codepen.io/jlidbeck/pen/qmjEwa?editors=1010 –

Смежные вопросы