innerHTML添加脚本会导致错误

时间:2015-01-29 18:32:31

标签: javascript node.js pug

这是我用来为TeX添加脚本的函数:

function change() {
        var format = document.getElementById("format");
        var original_text = document.getElementById("question");
        var s = document.createElement('script');
        s.setAttribute('type', 'math/tex; mode=display');
        s.value = {x};
        var newdiv = document.createElement('div');
        newdiv.innerHTML = s.toString();
        document.body.appendChild(newdiv);
    }

但这显示错误为ReferenceError: Can't find variable: change

我哪里出错了?

3 个答案:

答案 0 :(得分:1)

拒绝这一行:

s.value = {x};

括号用于 JSON (JavaScript Object Notation) Javascript的对象文字语法。期望你完成一个hashmap,如下所示:

s.value = {x: 'someValue'}

你的结束括号出乎意料。但是,实际上想要的是一个字符串。就Javascript而言,字符串对LaTex来说意味着特殊的事实只是巧合:

s.value = '{x}';

这是否能实现你的最终目标还有待观察,但如果没有,那么你可能需要打开一个单独的问题。快乐的编码< 3

答案 1 :(得分:1)

我猜你可能想做类似的事情:

function change() {
    var format = document.getElementById("format");
    var original_text = document.getElementById("question");
    var s = document.createElement('script');
    s.setAttribute('type', 'math/tex; mode=display');
    s.innerHTML = "{x}";
    var newdiv = document.createElement('div');
    newdiv.appendChild(s);
    document.body.appendChild(newdiv);
}

调用change()函数会在div标记的末尾添加<body>脚本标记,如下所示:

<div><script type="math/tex; mode=display">{x}</script></div>

答案 2 :(得分:0)

我终于找到了问题所在。这是我在html页面中转换或呈现MathJax脚本的错误方式。它应该像这样修复:

添加另一个脚本:

<script>
  //
  //  Use a closure to hide the local variables from the
  //  global namespace
  //
  (function () {
    var QUEUE = MathJax.Hub.queue;  // shorthand for the queue
    var math = null;                // the element jax for the math output.

    //
    //  Get the element jax when MathJax has produced it.
    //
    QUEUE.Push(function () {
      math = MathJax.Hub.getAllJax("MathOutput")[0];
    });

    //
    //  The onchange event handler that typesets the
    //  math entered by the user
    //
    window.UpdateMath = function (TeX) {
      QUEUE.Push(["Text",math,"\\displaystyle{"+TeX+"}"]);
    }
  })();
</script>

然后它可以像这样轻松转换:

<p>
Type some TeX code: (Example: \int\sin{x}\;{dt})
</p>
<input id="MathInput" class="form-control" type="text" size="50" onchange="UpdateMath(this.value)" />
<p>

<div id="MathOutput">
You typed: ${}$
</div>

输出如下:

enter image description here

感谢@DemoUser的宝贵回答。