【问题标题】:Insert MathML dynamically with jQuery使用 jQuery 动态插入 MathML
【发布时间】:2012-11-17 06:38:07
【问题描述】:

我编写了一个讨厌的小 JavaScript 函数,它创建了一个 MathML 矩阵 DOM。我的问题是,当我使用 jQuery 的 append(MathMLDOM) 插入 DOM 时;它没有正确显示。但是当我复制粘贴生成的 XML 并将其手动插入 HTML 文档时,它显示得很好。为什么不追加工作,有什么方法可以动态插入 MathML DOM?

问候

【问题讨论】:

    标签: javascript jquery xml dom mathml


    【解决方案1】:

    您是否附加了正确的 XML 命名空间?这对我有用:

    $('#foo').append('<math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>a</mi><mi>i</mi></msup><mo>+</mo><mi>b</mi></math>')
    

    没有命名空间,没有 MathML。

    【讨论】:

    • 感谢您的意见。我的错误是使用 jQuery DOM 元素。什么时候像在你的代码 sn-p 中那样使用纯 xml 它可以工作。
    • 即使使用 DOM 元素,您也需要在适当的命名空间中创建它们。
    【解决方案2】:

    是的,您需要命名空间,它需要在创建元素时提供。文档对象的 createElementNS() 方法完成了这个:

    document.createElementNS("http://www.w3.org/1998/Math/MathML", "element");
    

    其中“element”是一个字符串,如“mo”、“mfrac”、“math”等。您可以将其包装在插入正确命名空间的函数中。无论如何,它可以在 Firefox 中运行。

    var mathml = function(el) {
        return document.createElementNS("http://www.w3.org/1998/Math/MathML", el);
    };
    

    之后你可以从它创建一个 jQuery 对象:

    $mi1 = $( mathml("mi") ).text(a);
    $mn1 = $( mathml("mn") ).text(2);
    $term1 = $( mathml("msup") ).append($mi1).append($mn1);
    

    会给你一个 $term1 jQuery 对象,内容为 a2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      相关资源
      最近更新 更多